面试题:Java中 接口 和 抽象类 的区别
接口 和 抽象类 定义
抽象类:如果多个类中包含相同的行为,但行为发出的动作不一样,这时可以进行上层的抽象,抽象出一层功能定义,即抽象方法,但没有对应的功能实现。抽象方法包含在被 abstract
修饰的类中即抽象类。它具有如下特点
- 被
abstract
修饰的方法称为抽象方法,抽象方法只有方法声明没有方法体- 注意:抽象类是为了继承重写抽象方法的,所以抽象类不能用
final
修饰。同时外部抽象类不允许使用 static 声明,而内部的抽象类可以使用 static 声明(继承的时候使用“外部类.内部类”的形式表示类名称)
- 注意:抽象类是为了继承重写抽象方法的,所以抽象类不能用
- 抽象类可以包含属性、方法、构造方法,但构造方法不能用来实例化对象,只能被子类调用
- 抽象类中的构造方法,其存在目的是为了抽象类的属性初始化
- 注意:子类对象实例化时,先执行父类构造器,再执行子类构造器
- 抽象类不能被实例化,只能被继承
- 包含抽象方法的类一定是抽象类,但抽象类不一定包含抽象方法,抽象类还可以包含普通方法
- 抽象方法的权限修饰符只能为
public、protected、default
,默认情况下为 public - 一个类继承于一个抽象类,则子类必须实现抽象类的抽象方法,如果子类没有实现父类的抽象方法,那子类必须定义为抽象类
public abstract class AbstractName{
public String variable;
public AbstractName(String variable){
this.variable = variable;
}
public abstract void method1();
public void method2(){
//do something
}
}
接口:Java接口可以看成是一种特殊的类,即用 interface
关键字修饰的类。它具有如下特点
- 接口中可以包含 变量 和 方法,变量被隐式指定为
public static final
,方法被隐式指定为public abstract
- 接口支持多继承,解决了 Java 中类不能多继承的问题
- 一个类可以同时实现多个接口,一个类实现某个接口则必须实现该接口中的抽象方法,否则该类必须被定义为抽象类
public interface InterfaceName{
public static final int variable=10;
default void method1(){
//do something
}
public static void method2(){
//do something
}
public void method3();
}
总结:从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范
接口 和 抽象类 区别
-
public
-