Java日志第18天 2020.7.23

接口

接口是一种公共规范标准。

接口是一种引用数据类型,最重要的内容是抽象方法

使用interface关键字

接口当中的抽象方法,修饰符必须是两个关键字,public、abstract,两个关键字个选择性省略。

public interface MyInterface {

    public abstract void method1();
    //省略abstract
    public void method2();
    //省略public
    abstract void method3();
}

接口使用步骤

1.接口不能直接使用,必须有一个“实现类”来实现接口。

格式:

public class 实现类名称 implements 接口名称{

  //方法体

}

2.接口的实现必须覆盖重写接口中所有的抽象方法

public class MyInterfaceImpl implements MyInterface {

    @Override
    public void method1() {
        System.out.println("实现方法1");
    }

    @Override
    public void method2() {
        System.out.println("实现方法2");
    }

    @Override
    public void method3() {
        System.out.println("实现方法3");
    }
}

3.创建实现类的对象进行使用。

public class Demo01MyInterface {

    public static void main(String[] args) {

        MyInterfaceImpl myInterface = new MyInterfaceImpl();
        myInterface.method1();
        myInterface.method2();
        myInterface.method3();
    }
}

结果如下

*如果实现类中并没有覆盖重写接口中所有的方法,这个类是抽象类

接口定义默认方法

Java 8之后,允许接口定义默认方法,格式如下:

public default 返回值类型 方法名称(参数列表) { 方法体 }

默认方法可以解决接口升级问题

当一个接口有很多的实现类,此时需要定义一个新的方法,不需要在各个需要类中编写方法,而在接口中定义默认方法即可实现。方便了接口的升级。

public interface MyInterface {

    public abstract void method1();
    //省略abstract
    public void method2();
    //省略public
    abstract void method3();

    public default void method4(){
        System.out.println("实现方法4");
    }
}
public class Demo01MyInterface {

    public static void main(String[] args) {

        MyInterfaceImpl myInterface = new MyInterfaceImpl();
        myInterface.method1();
        myInterface.method2();
        myInterface.method3();
        myInterface.method4();
    }
}

结果如下

如果在实现类中重写定义默认方法,调用是会调用实现类方法

public class MyInterfaceImplB implements MyInterface {
    @Override
    public void method1() {
        System.out.println("实现方法1");
    }

    @Override
    public void method2() {
        System.out.println("实现方法2");
    }

    @Override
    public void method3() {
        System.out.println("实现方法3");
    }

    @Override
    public void method4(){
        System.out.println("实现类实现方法4");
    }
}
public class Demo01MyInterface {

    public static void main(String[] args) {

        MyInterfaceImpl myInterface = new MyInterfaceImpl();
        myInterface.method1();
        myInterface.method2();
        myInterface.method3();
        myInterface.method4();

        System.out.println("================");
        MyInterfaceImplB myInterface2 = new MyInterfaceImplB();
        myInterface2.method1();
        myInterface2.method2();
        myInterface2.method3();
        myInterface2.method4();
    }
}

结果如下

定义静态方法

Java 8之后,接口当中允许定义静态方法,格式如下:

public static 返回值类型 方法名称( 参数列表 ) { 方法体 }

public interface MyInterface {
    
    //定义静态方法
    public static void method(){
        System.out.println("实现静态方法");
    }
    
}
public class Demo01MyInterface {

    public static void main(String[] args) {
        //报错!
  //        MyInterfaceImpl myInterface = new MyInterfaceImpl();
    //    myInterface.method5();

        MyInterface.method();
    }
    
}

注意:不能通过接口实现类的对象来调用接口的静态方法,需要通过接口名称直接调用静态方法。

定义私有方法

Java 9之后,接口允许定义私有方法

1.普通私有方法:解决多个默认方法之间重复代码问题,格式如下:

private 返回值类型 方法名称

( 参数列表 ) { 方法体 }

2.静态私有方法:解决多个静态方法之间重复代码问题,格式如下:

private static 返回值类型 方法名称 ( 参数列表 ) { 方法体 }

public interface MyInterface {

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

    public default void methodB(){
        System.out.println("B");
    }
    //私有方法
    private void method(){
        System.out.print("实现方法");
    }
}

定义成员变量

必须使用public static final三个关键字,所以其实是一个常量,一旦赋值便不可修改。

注意事项:

1.三个关键字可以省略,省略与否效果都是一样的。

2.接口中的常量必须赋值。

3.接口中常量名称全部大写,用下划线分隔单词

使用方法:

接口名称.成员变量名称

public interface MyInterface {

    public static final int NUM_OF_CLASS = 10;
    int NUM_OF_SEAT = 5;
}
public class Demo01MyInterface {

    public static void main(String[] args) {
        System.out.println("The number of class is "+MyInterface.NUM_OF_CLASS);

        System.out.println("The number of seat is "+MyInterface.NUM_OF_SEAT);
    }

}

结果如下:

猜你喜欢

转载自www.cnblogs.com/Gazikel/p/13368122.html