接口
当一个抽象类,如果抽象类中所有方法都是抽象的,那么我们就可以把它定义为一个接口,接口是对行为的抽象,类是对属性和行为的抽象。接口没有具体方法,也没有属性。
接口中可以定义常量。
接口也能继承接口,可以多级继承,也可以继承于多个父接口。
interface A{ @Override @Override @Override @Override |
接口的实现
关键字:implements
语法:class 类名 implements 接口名{}
一个类如果实现了接口,就必须要实现接口中所有的抽象方法。
接口在JDK1.8中的特性
接口可以定义静态的方法,用接口名打点调用。
可以选择性地实现接口中的方法,定义默认方法即可。语法: public default void 方法名(){}
接口被类实现的时候没有强制性,可以重写方法。
接口的好处
1.接口定义的是一种标准,可以使我们的代码分层开发,分模块开发。
2.降低代码的耦合度,提高代码的可扩展性和可维护性。
3.接口改进了单继承的局限。
接口和抽象类的区别
1.接口是行为的抽象。可以有静态方法,抽象方法和默认方法。抽象类可以有所有方法。
2.接口和抽象类都不能实例化,接口需要类来实现,然后通过类实例化;抽象类需要子类来继承,然后通过子类实例化。
3.抽象类智能单继承,接口可以多继承(jdk1.7),接口还可以多实现。
4.接口中的属性是static final类型的,抽象类中的属性跟普通类中的属性没有区别。
5.接口中的方法默认就是抽象的,不需要加abstract,抽象类中的抽象方法需要加上abstract。
父子类之间类型转换
子类→父类:
语法:父类名 对象名 = new 子类名();
在父子类、抽象类、接口中,都是可行的。子类的类型可以自动转换成父类的类型,如果子类重写了父类的方法,那么使用父类的引用调用方法时,调用的是子类的方法。
属性是不适用的,属性没有重写的概念。子类的实例赋给父类的引用的时候,调用属性时,调用的是父类的属性。
父类→子类:
前提:这个父类的类型的引用有真身,而且只能转换成这个真身对应的子类类型。
语法:子类名 新对象名 = (子类名)原对象名;