java基础 ---- 接口

java基础 ---- 接口

接口的理解概述:

接口(interface)用作多个类的公共规范,使得多个类能同过这一接口实现协调适配。"实现接口"可类比继承体系,虽然两者的使用大部分相同,但是接口强调功能的实现,继承强调所属关系。粗易例如电脑类,U盘类,迷你电风扇类等都通过执行(implement)一个标准的USB接口完成数据传输等功能的协调适配;前者又都可以继承电子产品父类表明父子类间的所属关系

接口的使用概述:

interfance申明接口,implement声明执行接口。接口中封装常量和方法,依据不同版本的JDK可封装的方法类型不同,其中JDK1.8后,更新接口直接用默认(default)方法或者静态(static)方法:更新用抽象方法的话,所有实现类也必须调整实现该新增方法,否则就得声明为抽象类;JDK9之后,更新接口过程中,多个默认方法(静态方法)中重复代码可提取出来放入一个不让实现类访问的私有方法(私有静态方法)。一个类能继承唯一父类的同时实现多个接口。一个接口能通过关键字extends继承另一个或者多个接口。


 

接口最终测试代码:

interface MyInterface {
    //
    //接口没有成员变量,只有常量
    public static final String SIGN_FU = "MyInterface";//final 关键词说明SIGN_FU是常量不可改变

    //public static final String SIGN_FU;错于没有赋初始值
    //String SIGN_FU = "MyInterface " 不写关键词也是规定默认public static final
    //String signFu = "MyInterface " 推荐使用完全大写的字母,下划线进行分隔的命名规则
    //
    //所有版本JDK都包含抽象方法,常量
    public abstract void methodAbs();

    //abstract void methodAbs();
    // public void methodAbs();
    // void methodAbs();
    //
    //JDK9之后,可以封装私有方法和私有静态方法,供静态方法和静默方法调用使用
    private void methodPrivate(){
        System.out.println("这是一个私有方法:包含默认方法的重复代码");
    }
   private static void methodPrivateStatic(){
        System.out.println("这是一个私有静态方法:包含静态方法的重复代码");
   }
    //
    //多个默认方法调用私有方法中的重复代码(JDK9之后)
    public default void methodDefault() {
        //default void methodDefault()
        //
        methodPrivate()
        System.out.println("这是新添加的默认方法");
    }

    public default void methodDefault02() {
        //default void methodDefault()
        //
        methodPrivate()
        System.out.println("这是新添加的默认方法02");
    }

    //
    //同理,静态方法调用私有静态方法的重复代码(JDK9之后)
    public static void methodStatic() {
        methodPrivateStatic()
        System.out.println("这是一个静态方法");
    }
}
//
//测试一个与MyInterface有同名三类方法的MyInterface02
interface MyInterface02 {
    public abstract void methodAbs();

    //
    public default void methodDefault() {
        //default void methodDefault()
        System.out.println("这是新添加的默认方法");
    }

    //
    public static void methodStatic() {
        System.out.println("这是一个静态方法");
    }
}
//
class MyInterfaceImpl implements MyInterface, MyInterface02 {//不同于继承,实现类可以同时实现多个接口
    //
    //多接口重名的抽象方法只要实现一次
    @Override
    public void methodAbs() {
        System.out.println("这是一个接口抽象方法的实现");
    }

    //
    //多接口重名的默认方法必须重写一次,不重名的可直接调用
    @Override
    public void methodDefault() {
        System.out.println("这是一个接口默认方法的重写");
    }
}
//
public class InterfaceCode {
    public static void main(String[] args) {
        MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl();
        MyInterface.methodStatic();  //"这是一个静态方法"
        MyInterface02.methodStatic();//"这是一个静态方法"
        //静态方法通过接口调用,重名没事
        //myInterfaceImpl.methodStatic();错于静态方法只与接口有关,与对象无关
        //methodStatic();错于一个类可以实现多个接口,所以调用静态方法必须要用接口名调用
        //
        //多接口重名默认方法,实现类重写一次后覆盖执行
        myInterfaceImpl.methodDefault();//"这是一个接口默认方法的重写"
        //
        //多接口重名抽象方法,实现类只重写一次后统一执行
        myInterfaceImpl.methodAbs();//"这是一个接口抽象方法的实现"
    }
}
//构造具有同名抽象方法,静态方法,成员方法对应默认方法的父类和接口
abstract  class Fu {
    public void method() {
        System.out.println("AAA");
    }

    abstract void methodAbs();
    //void methodAbs();错于父类中的抽象方法必须用abstract声明,接口可以省略
    //
    static void methodStatic() {
        System.out.println("aaa");
    }
}
    interface MyInterface {
        public default void method() {
            System.out.println("BBB");
        }

        void methodAbs();

        //
        static void methodStatic() {
            System.out.println("bbb");
        }
    }
    class Zi extends Fu implements MyInterface{//子类可以继承唯一父类的同时实现多个接口
    //
    //父类,接口抽象方法同名,只需要重写一次抽象方法    
    public void methodAbs(){
            System.out.println("CCC");
        }
     //
     //构造一个子类静态方法于父类,接口静态方法同名   
        public static void methodStatic(){
            System.out.println("DDD");
        }
    }
    //
    public class InterfaceCode {
        public static void main(String[] args) {
            Zi zi = new Zi();
            //
            // 父类和接口的抽象方法同名,子类重写一次后统一执行
            zi.methodAbs(); //CCC
            //
            //接口静态方法只有接口有关,父类的静态方法只有父类有关,子类静态方法只与子类有关
            zi.methodStatic(); //aaa
            Zi.methodStatic(); //DDD
            Fu.methodStatic(); //DDD
            MyInterface.methodStatic(); //bbb
            //父类的成员方法和接口的默认方法同名,优先执行父类的成员方法
            zi.method();    //AAA
        }
    }
interface MyInterfaceFu {
    public default void method() {
        System.out.println("AAA");
    }

    void methodAbs();
}

interface MyInterfaceFu02 {
    public default void method() {
        System.out.println("BBB");
    }

    void methodAbs();
}

interface MyInterfaceZi extends MyInterfaceFu, MyInterfaceFu02 {//子接口可继承多个父接口

    //父接口中默认方法重名,子接口需要重写一次
    @Override
    public default void method() {
        System.out.println("CCC");
    }

    void methodAbs02();
}

class MyInterfaceImpl implements MyInterfaceZi {//子类可以继承唯一父类的同时实现多个接口

    //父子接口中抽象方法同名,只需要重写一次抽象方法
    public void methodAbs() {
        System.out.println("DDD");
    }

    //父子接口中抽象方法不同名,需要另外重写一次抽象方法
    public void methodAbs02() {
        System.out.println("EEE");
    }
}

public class InterfaceCode {
    public static void main(String[] args) {
        MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl ();
        //
        // 父子接口的抽象方法同名,实现类重写一次后统一执行
        myInterfaceImpl.methodAbs(); //DDD
        //
        myInterfaceImpl.methodAbs02(); //EEE
        //
        //父接口和子接口的默认方法同名,子接口重写一次后,实现类调用覆盖执行
        myInterfaceImpl.method();    //CCC
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值