抽象类与接口的区别(面试题)
- 在实际的开发之中可以发现抽象类和接口的定义形式是非常相似,从 jdk1.8 开始实际上就特别明显了 ,因为在 jdk1.8里面
- 接口也可以定义 default 或者 static 方法了,但是这两者依然是有着明显的定义区别和使用区别的
* NO 区别 抽象类 接口
* 1 定义关键字 abstract class 抽象类名称 interface 类名称
* 2 组成 构造,普通方法,静态方法,全局常量 ,普通成员 抽象方法,全局常量,普通方法,static方法
* 3 权限 可以使用各种权限 定义 只能使用public定义
* 4 子类使用 子类通过 extends 关键字可以继承一个抽象类 子类使用 implements 关键字可以实现多个接口
* 5 两者关系 抽象类可以实现多个接口 接口不允许继承抽象类,但是允许继承多个父接口
* 6 使用 1.抽象类或接口必须定义子类;
* 2. 子类一定要覆写抽象类或接口中的全部抽象方法
* 3.通过子类的向上装型实现抽象类或 接口对象实例化。
package nterface;
interface IMessage {
public void get () ;
class EatRalr implements IMessage {
public EatRalr(Eatproxys eatproxys) {
// TODO Auto-generated constructor stub
}
public void get () {
System.out.println("[真实主类]得到一份食物,而后开始吃饭");
}
}
class Eatproxys implements IMessage {
private IMessage get ; //为吃而服务
public Eatproxys() { //一定要有一个代理项
// TODO Auto-generated method stub
this.get = get;
}
public void get () {
this.get();
this.get.get();
this.clear();
}
public void prepare() { //准备吃的过程
// TODO Auto-generated method stub
System.out.println("[代理主类]1.购买食材。 ");
System.out.println("[代理主类]2.处理食材。 ");
}
public void clear () {
System.out.println("[代理主类]3.收拾碗筷。 ");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
IMessage eat = new EatRalr(new Eatproxys());
eat.get();
}
}
}
输出结果:
[真实主类]得到一份食物,而后开始吃饭
- 当抽象类和接口都可以使用的情况下优先考虑接口,因为接口可以避免子类的单继承局限
- 从设计角度而言,也要先从接口来进行项目的整体设计
- 接口是第一设计思考,抽象类,普通类,普通方法