【9】Java多态:接口
一、接口
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
1、举个栗子:
手机可以拍照、上网、打游戏、打电话相机可以拍照,
电脑可以上网, 玩游戏,
智能手表可以打电话.
1、他们之间不能抽取具有公共特征的父类, 如果没有接口,需要创建一个手机电脑类, 手表类, 相机类, 在每个类中增加相应的功能等等。
2、他们当中很多类中有相同行为能力的, 我们可以根据他们的行为能力来关联, 就是java 中的接口.
2、接口与类的区别:
- 接口不能用于实例化对象。
- 接口没有构造方法。
- 接口中所有的方法必须是抽象方法。
- 接口不能包含成员变量,除了 static 和 final 变量。
- 接口不是被类继承了,而是要被类实现。
- 接口支持多继承。
二、接口的实现
声明接口:上网接口
//接口访问修饰符:public 默认 public interface INet { //访问修饰符默认public // 接口中抽象方法可以不写abstract关键字 //当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类 public void network(); //接口中可以包含常量,默认public static final int TEMP=30; }
实现类:手机可以上网
//可以实现多个接口 public class FourthPhone implements IPhoto,INet{ public void network() { System.out.println("手机可以上网"); } }
测试类
public class Test { public static void main(String[] args) { INet one = new FourthPhone(); one.network(); } }
三、接口的默认方法&静态方法
public interface INet { //default:默认方法 可以带方法体 jdk1.8后新增 //可以在实现类中重写,并可以通过接口的引用调用 default void connection(){ System.out.println("我是接口中的默认链接"); } // static:静态方法 可以带方法体 jdk1.8后新增 // 不可以在实现类中重写,可以同接口名调用 static void stop(){ System.out.println("我是接口中的静态方法"); } }
四、接口的继承
接口也可以是实现继承,并且可以实现多继承 如果多个父类中存在默认的重名方法,则需要在子类接口中重写重名方法。
同样也是使用使用extends关键字。
五、问题解决
1.多接口重名同名方法
在继承接口的方法中会报错
【解决】在继承接口的方法中,【重写】一个自己的同名默认方法
2.父类与继承接口中重名其中的方法
【默认】指向【父类当中】的重名方法若自己重写一个自己的重名方法 , 【指向子类的重写方法】
3.多接口重重名常量处理的解决方案
在一个类内,如果指定是若干个接口,而这若干个接口之间有同名的变量的时候,在此类中调用接口中含有同名的变量的时候也会报错。
在上述的例子中,如果该类有继承关系的父类当中也含有与接口同名的变量,则同样会报错。
解决此类办法的途径就是在该类中显式的定一个该同名的变量,以消除这种错误。