美文网首页
java笔记--接口interface与实现implements

java笔记--接口interface与实现implements

作者: 吃饱喝足搬代码丶 | 来源:发表于2018-04-04 22:04 被阅读0次

    格式:

    interface{}

    接口中的成员修饰符是固定的:

    1 成员变量:publica static final
    2 成员函数:publica abstract
    3 发现接口中的成员都是public的

    当一个抽象类的方法都是抽象的时候,这时可以将
    该抽象类用另一种形式定义和表示,就是 接口 。

    定义接口使用的关键字不是class,是interface。

    对于接口当中常见的成员:而且这些成员都有固定的修饰符
    1 全局常量:public static final
    2 抽象方法,public abstract

    interface Demo{
        public static final int NUM=4;
        
        public abstract void show1();
        public abstract void show2();
    } 
    

    由此得出结论,接口中的成员都是公共的权限。

    类与类之间是继承关系,类与接口之间是实现关系implements。

    接口不可以实例化,只能由实现了接口的子类并覆盖了接口中所有的抽象方法后,该子类才可以实例化,否则,这个子类就是一个抽象化。

    实现例子:
    //定义接口
    interface Demo{
        public static final int NUM=4;
        
        public abstract void show1();
        public abstract void show2();
    } 
    //实现接口的子类并覆盖接口中所有的抽象方法
    class DemoImpl implements Demo{
        public void show1()
        {}
        public void show2()
        {}
    }
    
    //将子类实例化,并调用NUM
    public class InterfaceDemo {
    
        public static void main(String[] args) {
            DemoImpl d=new DemoImpl();
            System.out.println(d.NUM);
            System.out.println(DemoImpl.NUM);
            System.out.println(Demo.NUM);
        }
    
    }
    
    运行: image.png

    接口的出现将“多继承”通过另外一种形式体现出来,即“多实现”。

    在java中不直接支持多继承,因为会出现调用的不确定性。所以java将多继承机制进行改良,在java中变成了多实现。

    一个类可以实现多个接口。

    多实现例子:
    interface A{
        public void show();
    }
    
    interface Z{
        public void show();
    }
    interface M{
        public int add(int a,int b);
    }
    public class MoreIamplements implements A,Z,M//多实现
    {
        public void show(){
            System.out.print(add(1,2));
        }
        public int add(int a,int b){
            return a+b;
        }
    }
    
    public class InterfaceDemo {
    
        public static void main(String[] args) {
            MoreIamplements m=new MoreIamplements();
            m.show();
    }
    
    运行: image.png

    一个类在继承另一个类的同时,还可以实现多个接口。

    一个类在继承另一个类的同时,还可以实现多个接口,接口的出现避免了单继承的局限性:

    //接口A,M的代码同上
    class Q{
        public void method(){
            System.out.println("继承");
        }
    }
    public class MoreIamplements extends Q implements A,M//继承先增加功能,多实现再扩展其他功能
    {
        public void show(){
            super.method();
            System.out.println("实现");
        }
        public int add(int a,int b){
            return a+b;
        }
    
    public class InterfaceDemo {
    
        public static void main(String[] args) {
            MoreIamplements m=new MoreIamplements();
            m.show();
              }
    }
    
    运行: image.png

    接口与接口之间可以继承,是继承关系,而且接口可以多继承。原理就是方法体是否有存在。

    interface CC{
        void show();
    }
    interface MM{
        void show();
    }
    interface QQ extends CC,MM{
        void function();
    }
    class WW implements QQ{
        //因为接口都是抽象的,所以实现要覆盖三个方法。
        public void show(){}
        public void method(){}
        public void function(){}
    }
    

    总结:

    接口的特点:

    1 接口是对外暴露的规则
    2 接口是程序的功能扩展
    3 接口的出现降低耦合性(联系性)
    4 接口可以用来多实现
    5 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口。
    6 接口与接口之间可以有继承关系

    接口与抽象类的异同点:

    相同点:
    都是不断向上抽取而来的。

    不同点:
    1 抽象类需要被继承,而且只能单继承。接口需要被实现,而且可以多实现
    2 抽象类中可以定义抽象方法和非抽象方法,子类继承后,可以直接使用非抽象方法。
    3 抽象类的继承,是 is a关系,在定义该体系的基本共性内容。接口的实现是 like a关系,在定义额外功能。

    abstract class 犬{//基本功能
            abstract void 吼叫();
    }
    //abstract class 导盲//会导盲的不止有导盲犬
    interface 导盲{//额外功能
            abstract void 导盲();
      }
    class  导盲犬  extends   犬 implements  导盲{
            public void 吼叫(){}
            public void 导盲(){}
    }
    

    接口的应用:

    以笔记本为例,为了扩展笔记本的功能,但日后出现什么功能设备不知道。
    定义一个规则,只要日后出现的设备符合这个规则就可以了。
    规则在java中就是接口。

    interface USB{//暴露的规则
        public void open();
        public void close();
    }
    
    public class BookPC {
    
        public static void main(String[] args) {
            useUSB(new UPan());//功能扩展
        }
        //使用规则
        public static void useUSB(USB u){//接口类型的引用,用于接收(或者说指向)接口的子类对象       //这里是多态(后面讲)的使用即USB u=new UPan();
            u.open();
            u.close();
        }
    }
    //一年后买了个U盘   必须得符合规则
    //实现规则
    //这些设备和电脑的耦合性降低了
    class UPan implements USB{//符合规则
        public void open(){
            System.out.println("upan open");
        }
        public void close(){
            System.out.print("upan close");
        }
    }
    
    运行: image.png

    相关文章

      网友评论

          本文标题:java笔记--接口interface与实现implements

          本文链接:https://www.haomeiwen.com/subject/vohhhftx.html