Java 接口&抽象类
- 接口和抽象类提供了一种将接口与实现分离的更加结构化的方法
抽象类
- 抽象方法: 只用声明,而没有具体的实现。声明:
abstract void fun();
抽象类:如果一个类没有足够的信息描述一个具体的对象,而需要其他的类来支撑它。 - 使用注意:
- 抽象类不能被实例化,实例化的工作应由其子类完成,它只需要定义抽象方法接口即可。
- 抽象类方法必须由子类重写
- 如果一个类包含抽象方法,该类必须定义成抽象类,使用
abstract
关键字修饰 - 抽象类中可以包含具体的方法,也可以不包含抽象方法
- 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则子类必须定义为抽象类
- 子类中的抽象方法不可与父类抽象方法同名
- abstract不能与final并列修饰同一个类, abstract 不能与 private、static、final 或 native 并列修饰同一个方法
- 因为被final修饰的类不能被继承,如果一个抽象类不能被继承,那这个抽象类就没用了,同样,抽象方法也需要被子类继承
接口
- 接口中可以含有变量和方法。接口中的变量会被隐式地指定为
public static final
,方法会被隐式地指定为public abstract
- 接口是抽象类的延伸,避免了类不能多继承的问题。一个类只能有一个父类,而可以实现多个接口。
- 使用注意:
- 接口中的方法和变量的访问权限自动被声明
public
- 实现接口的非抽象类必须实现该接口的所有方法。
- 实现多接口时,避免方法名重复
- 接口中的方法和变量的访问权限自动被声明
接口和抽象类的区别
- 语法层面上
- 抽象类可以提供成员方法的实现细节,而接口只能存在
public abstract
方法 - 抽象类的成员变量可以是各种类型的,而接口的成员变量只能是
public static final
类型 - 接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法
- 一个类只能继续一个抽象类,而一个类却可以实现多个接口
- 抽象类可以提供成员方法的实现细节,而接口只能存在
- 设计层面
- 抽象类是对一种事物的抽象,即对类的抽象,而接口是对行为的抽象。一个类如果继承一个类,则它就是这种事物,具有它全部的属性和行为。而一个类实现一个接口,则是它增添了某种行为
- 抽象类作为很多子类的父类,它是一种模板设计设计。而接口是一种规范,它是一种辐射式设计。