我所理解的接口和抽象类

简介:

参考:http://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html


在实践过程中,抽象类和接口都经常用到。但是,对于什么情况下该用抽象类,什么情况下该用接口,总是有点搞不清楚。

于是,在阅读别人对着两者理解之后,终于对两者的区别有了更进一步的理解。

有关这两者的一些基本区别,可以参考上面的文章。这里我只介绍下对于抽象和接口该在什么情况下使用的理解。

抽象类重点在于对于属性和方法的继承;而接口则重在多个类(可能他们之间毫无联系)对同一种方法或者属性的描述,体现了多态性。


抽象出一个类(类),定义一个抽象方法(判断是否会飞)

1、抽象类

例如:抽象出一个鸟类。对于鸟类,抽象出一个方法。用来判断这种鸟会不会飞。

由于鸟类中的canFly是抽象方法,因此所有继承鸟类的子类都必须实现这个canFly方法。

/**
 * 鸟
 */
public abstract class Bird {

	public abstract boolean canFly();
}

/**
 * 燕子
 * 
 */
public class Swallow extends Bird{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}


}

/**
 * 猫头鹰
 *
 */
public class Owl extends Bird{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}

}

假如现在有这种状况。要同时描述鸟类和飞机,它们可以有一个共同的方法来判断是否能飞。但是这个时候,两者肯定是没有继承关系的啦。

你不能指望飞机通过继承鸟类来获得这个canFly的方法。

此时,你就可以把canFly抽象到接口中,然后鸟类和飞机都继承这个接口。

2、接口

public interface IFly {
	public abstract boolean canFly();
}

/**
 * 鸟
 */
public class Bird implements IFly{

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return false;
	}

}

/**
 * 飞机
 *
 */
public class Airplane implements IFly {

	@Override
	public boolean canFly() {
		// TODO Auto-generated method stub
		return true;
	}

}



相关文章
|
2月前
|
Java 编译器
关于抽象类和接口(详解)
关于抽象类和接口(详解)
41 6
|
2月前
|
程序员 C++
抽象类与接口
抽象类与接口
30 0
|
7月前
|
C++
c++接口(抽象类)
c++接口(抽象类)
62 1
|
7月前
|
Java 编译器
抽象类和接口
抽象类和接口
|
7月前
|
Java
抽象类和接口的区别
抽象类和接口的区别
89 0
C++中的抽象类和接口
C++中的抽象类和接口
90 0
|
Java 编译器
07 接口和抽象类
接口 比抽象类更加抽象的是接口,在接口中所有的方法都会被 public abstract 修饰。 注意:Java 8 之后接口中新增加了 default 默认方法和 对 static 方法的支持。 • Java 中不支持多继承,而是通过接口实现比多重继承更强的功能,java 通过接口可以使出于不同层次,甚至不相关的类具有相同的行为. • 接口可以认为是特殊的抽象类, 不能用于直接创建对象。接口的作用在于规定一些功能框架,具体功能的实现则通过该接口约束的类完成。
117 0
抽象类与接口
抽象类 abstract修饰符可以用来修饰方法,也可以用来修饰类,修饰方法就是抽象方法,修饰类就是抽象类 抽象类中可以没有抽象方法,但是抽象方法的类一定要声明为抽象类 抽象类,不能使用new关键字来创建对象,它使用来让子类继承的 抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的 子类继
|
存储 API
使用抽象类和接口的优解
使用抽象类和接口的优解   1. 前言 2. 所谓习惯认知 3. 开门见山的万金油 第1条:抽象类设计注重对象性,接口设计注重服务性 第2条:更近的抽象类,更远的接口 第3条:子类间有关系时考虑用抽象类,没有关系时一定要用接口 第4条:版本迭代中优先考虑使用抽象类而不是接口 4. 设计是个性的妥协 5. 参考资料 1. 前言 笔者相信,每个使用面向对象语言的开发者自编码以来,肯定便琢磨过抽象类(Abstract)和接口(Interface)的区别。
874 1