JavaSE 接口组成更新

1. 接口组成更新

1.1 接口组成更新概述

  • 接口的组成:
    1. 常量
      public static final(默认修饰符,可省略)
    2. 抽象方法
      public abstract(默认修饰符,可省略)
    3. 默认方法(Java 8)
    4. 静态方法(Java 8)
    5. 私有方法(Java 9)

1.2 接口中的默认方法

接口中默认方法的定义格式:

  • 格式:public default 返回值类型 方法名(参数列表){ }
  • 范例:public default void show3(){ }

接口中默认方法的注意事项:

  • 默认方法不是抽象方法,所以不强制被重写,但是可以被重写,重写的时候去掉 default 关键字
  • public 可以省略

接口中的默认方法主要用于来实现接口的升级而不破坏现有的代码

package bug.Interface01;

public interface MyInterface {
    void show1();
    void show2();

    public default void show3(){
        System.out.println("show3");
    }
}

package bug.Interface01;

public class MyInterfaceImplOne implements MyInterface {
    @Override
    public void show1() {
        System.out.println("one show1");
    }

    @Override
    public void show2() {
        System.out.println("one show2");
    }

}

package bug.Interface01;

public class MyInterfaceImplTwo implements MyInterface {
    @Override
    public void show1() {
        System.out.println("two show1");
    }

    @Override
    public void show2() {
        System.out.println("two show2");
    }

    @Override
    public void show3() {
        System.out.println("two show3");
    }
}

package bug.Interface01;
/*
    需求:
        1.定义一个接口MyInterface,里面有两个抽象方法:
            void show1();
            void show2();
        2.定义接口的两个实现类
            MyInterfaceImplOne
            MyInterfaceImplTwo
        3.定义测试类
            MyInterfaceDemo
            在主方法中,按照多态的方式创建对象并使用
 */
public class MyInterfaceDemo {
    public static void main(String[] args) {
        //按照多态的方式创建对象并使用
        MyInterface my = new MyInterfaceImplOne();
        my.show1();
        my.show2();
        my.show3();

        MyInterface my2 = new MyInterfaceImplTwo();
        my2.show3();
    }
}

1.3 接口中的静态方法

接口中静态方法的定义格式:

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

接口中静态方法的注意事项:

  • 静态方法只能通过接口名调用,不能通过实现类类名或对象名调用
  • public 可以省略
package bug.Interface02;

public interface Inter {
    void show();
    default void method(){
        System.out.println("Inter中的默认方法执行了");
    }
    public static void test(){
        System.out.println("Inter中的静态方法执行了");
    }
}

package bug.Interface02;

public interface Flyable {
    public static void test(){
        System.out.println("Flyable中的静态方法执行了");
    }
}

package bug.Interface02;

public class InterImpl implements Inter,Flyable {
    @Override
    public void show() {
        System.out.println("show方法执行了");
    }
}

package bug.Interface02;
/*
    需求:
        1.定义一个接口Inter,里面有3个方法:一个抽象方法,一个默认方法,一个静态方法
            void show();
            default void method(){ }
            public static void test(){ }
        2.定义一个接口的实现类
            InterImpl
        3.定义测试类
            InterDemo
            在主方法中按照多态的方式创建对象并使用
 */
public class InterDemo {
    public static void main(String[] args) {
        Inter i = new InterImpl();
        i.show();
        i.method();

        Inter.test();
//        i.test(); //报错
//        InterImpl.test(); //报错
        Flyable.test();
    }
}

1.4 接口中的私有方法

Java 9中新增了带有方法体的私有方法,这其实再 Java 8 中就埋下了伏笔: Java 8 允许在接口中定义带方法体的默认方法和静态方法。这样就可能会引发一个问题:当两个默认方法或静态方法中包含一段相同的代码实现时,程序必然考虑将这段代码抽取成一个共性方法,而这个共性方法是不需要让别使用的,因此用私有给隐藏起来,这就是 Java 9 增加私有方法的必然性。

接口中私有方法的定义格式:

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

接口中私有方法注意事项:

  • 默认方法可以调用私有的静态方法和非静态方法
  • 静态方法只能调用私有的静态方法
package bug.Interface03;

public interface Inter {
    default void show1(){
        System.out.println("show1开始执行");
//        System.out.println("初级工程师");
//        System.out.println("中级工程师");
//        System.out.println("高级工程师");
        show();
        System.out.println("show1执行结束");
    }
    default void show2(){
        System.out.println("show2开始执行");
//        System.out.println("初级工程师");
//        System.out.println("中级工程师");
//        System.out.println("高级工程师");
        show();
        System.out.println("show2执行结束");
    }
    private void show(){
        System.out.println("初级工程师");
        System.out.println("中级工程师");
        System.out.println("高级工程师");
    }
    static void method1(){
        System.out.println("method1开始执行");
//        System.out.println("初级工程师");
//        System.out.println("中级工程师");
//        System.out.println("高级工程师");
        method();
        System.out.println("method1执行结束");
    }
    static void method2(){
        System.out.println("method2开始执行");
//        System.out.println("初级工程师");
//        System.out.println("中级工程师");
//        System.out.println("高级工程师");
        method();
        System.out.println("method2执行结束");
    }
    private static void method(){
        System.out.println("初级工程师");
        System.out.println("中级工程师");
        System.out.println("高级工程师");
    }
}

package bug.Interface03;

public class InterImpl implements Inter{

}

package bug.Interface03;
/*
    需求:
        1.定义一个接口Inter
            default void show1(){ }
            default void show2(){ }
            static void method1(){ }
            static void method2(){ }
 */
public class InterDemo {
    public static void main(String[] args) {
        Inter i = new InterImpl();
        i.show1();
        System.out.println("-------");
        i.show2();
        System.out.println("-------");
        Inter.method1();
        System.out.println("-------");
        Inter.method2();
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值