【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.多接口重重名常量处理的解决方案

在一个类内,如果指定是若干个接口,而这若干个接口之间有同名的变量的时候,在此类中调用接口中含有同名的变量的时候也会报错。

在上述的例子中,如果该类有继承关系的父类当中也含有与接口同名的变量,则同样会报错。

解决此类办法的途径就是在该类中显式的定一个该同名的变量,以消除这种错误。

 

posted @ 2020-05-31 19:15  柠檬不萌!  阅读(269)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end