Java 接口的 default 与 static 关键字

  1. 由于接口的特性,实现接口的类必须实现接口的所有抽象方法,否则只能设置该类也为抽象类。而对于只想有针对性地实现接口中的一部分方法而言,JDK1.8之后 接口提供了另一个解决方案: default 关键字
  • deault 关键字可用于在接口中修饰抽象方法。被 default 关键字修饰的抽象方法可以带方法体。

  • 实现该接口的类可以自主决定是否实现该 默认(default) 抽象方法。
    接口示例代码:

    //接口访问修饰符:public  默认
    public interface INet {
        //接口中抽象方法可以不写 abstract 关键字
        //接口的抽象方法访问修饰符如果什么都没加,系统默认会给它赋予 public 的访问权限。理由是:当子类实现该接口时,重写方法时系统也会默认将 public 添加上。如果将子类重写方法的 public 去掉,则系统会提示子类方法的访问权限必须大于或等于父类的方法。
        void network();
    
        //定义常量
        int TEMP=20;
    
        //default: 默认方法  可以带方法体
        default void connection() {
            System.out.println("我是接口中的默认方法");
        }
    }
    

  1. JDK 1.8 除了新增 default 关键字,同时也新增了 static 关键字,示例代码如下:

    //接口访问修饰符:public  默认
    public interface INet {
        //接口中抽象方法可以不写 abstract 关键字
        //接口的抽象方法访问修饰符如果什么都没加,系统默认会给它赋予 public 的访问权限。理由是:当子类实现该接口时,重写方法时系统也会默认将 public 添加上。如果将子类重写方法的 public 去掉,则系统会提示子类方法的访问权限必须大于或等于父类的方法。
        void network();
    
        //定义常量
        int TEMP=20;
    
        //default: 默认方法  可以带方法体  jdk 1.8 后新增
        default void connection() {
            System.out.println("我是接口中的默认链接");
        }
    
        //static: 静态方法  可以带方法体  jdk 1.8 后新增
        static void stop() {
            System.out.println("我是接口中的静态方法");
        }
    }
    

    实现该接口的示例代码如下:

    public class Computer implements INet{
    
        @Override
        public void network() {
            System.out.println("电脑可以上网");
        }
    
        @Override
        public void connection() {
            INet.super.connection();
            INet.stop();
            System.out.println(INet.TEMP);
        }
    }
    

    Ps:

    • 可以通过接口名.super (如 INet.super.connection( ))的形式来调用接口的成员方法;
    • 可以通过 接口名(如INet.stop( ))调用接口中的静态方法或常量;
© 版权声明

相关文章

暂无评论

none
暂无评论...