接口的组成更新

接口的组成更新

  • 接口组成概述
    • 常量:public static final
    • 抽象方法:public abstract
    • 默认方法(Java 8):public default (重点记忆)
    • 静态方法(Java 8):public static(只能接口名访问)
    • 私有方法(Java 9):private

接口中默认方法

  • 概述
    用于接口的升级,而不影响现有的代码。

  • 接口中默认方法格式
    格式:public default 返回值类型 方法名(参数列表){ }
    范例:public default void show(){ }

  • 演示

    //接口
    public interface MyInterface {
        void show1();
        void show2();
        //默认方法
        public default void show3(){
    		System.out.println("3");
    	}
    }
    
    //实现类
    public class MyInterfaceImpl implements MyInterface{
        @Override
        public void show1() {
            System.out.println("show1");
        }
        @Override
        public void show2() {
            System.out.println("show2");
        }
        //可以选择性重写接口中的默认方法
        @Override
        public void show3(){
    		System.out.println("show3*");
    	}
    }
    
    //测试类
    public class Demo {
        public static void main(String[] args) {
            MyInterface m = new MyInterfaceImpl();
            m.show1();
            m.show2();
            m.show3();
        }
    }
    ---*---
    输出结果:
    show1
    show2
    show3*
    

    注意:

    • 接口的默认方法不是抽象方法,所以不强制重写,但也可以重写。重写需要去掉 default 关键字。
    • 接口的默认方法可以省略 public 关键字。

接口中静态方法

  • 接口中静态方法格式
    格式:public static 返回值类型 方法名 (参数列表){ }
    范例:public static void show(){ }

  • 演示

    //接口
    public interface MyInterface {
        //抽象方法
        void absM();
        //默认方法
        public default void defM(){
            System.out.println("默认方法");
        }
        //静态方法
        public static void staM(){
            System.out.println("静态方法");
        }
    }
    
    //实现类
    public class MyInterfaceImpl implements MyInterface{
    
        @Override
        public void absM() {
            System.out.println("抽象方法");
        }
    }
    
    public class Demo {
        public static void main(String[] args) {
            MyInterface m = new MyInterfaceImpl();
            m.absM();
            m.defM();
    //        m.staM();//报错,接口的静态方法只能通过接口名调用
            MyInterface.staM();
        }
    }
    ---*---
    输出结果:
    抽象方法
    默认方法
    静态方法
    

    注意:接口的静态方法,只能通过接口名调用。public可以省略,static 不能省略。


接口中私有方法

  • 接口中私有方法格式
    格式1:private 返回值类 方法名(参数列表){ }
    范例1:private void show(){ }

    格式2:private static 返回值类型 方法名(参数列表){ }
    范例2:private static void method(){ }

  • 演示

    //接口
    public interface MyInterface {
        public default void show1(){
            System.out.println("show1-开始");
    //        System.out.println("s1");
    //        System.out.println("s2");
    //        System.out.println("s3");
            show();
            System.out.println("show1-结束");
        }
        public default void show2(){
            System.out.println("show2-开始");
    //        System.out.println("s1");
    //        System.out.println("s2");
    //        System.out.println("s3");
            show();
            System.out.println("show2-结束");
        }
        //接口私有方法
        private void show(){
            System.out.println("s1");
            System.out.println("s2");
            System.out.println("s3");
        }
        public static void method1(){
            System.out.println("method1-开始");
    //        System.out.println("m1");
    //        System.out.println("m2");
    //        System.out.println("m3");
            method();
            System.out.println("method1-结束");
        }
        public static void method2(){
            System.out.println("method2-开始");
    //        System.out.println("m1");
    //        System.out.println("m2");
    //        System.out.println("m3");
            method();
            System.out.println("method2-结束");
        }
        //接口静态私有方法
        private static void method(){
            System.out.println("m1");
            System.out.println("m2");
            System.out.println("m3");
        }
    }
    
    //实现类
    public class MyInterfaceImpl implements MyInterface{
    
    }
    
    //测试类
    public class Demo {
        public static void main(String[] args) {
            MyInterface m = new MyInterfaceImpl();
            m.show1();
            System.out.println("--------");
            m.show2();
            System.out.println("--------");
            
            MyInterface.method1();
            System.out.println("--------");
            MyInterface.method2();
        }
    }
    ---*---
    输出结果:
    show1-开始
    s1
    s2
    s3
    show1-结束
    --------
    show2-开始
    s1
    s2
    s3
    show2-结束
    --------
    method1-开始
    m1
    m2
    m3
    method1-结束
    --------
    method2-开始
    m1
    m2
    m3
    method2-结束
    

    注意:接口中的私有方法主要用于封装接口中默认方法和静态方法的相同代码成一个共性方法。而此共性方法不需要让别人使用,所以将其私有化。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值