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);
    }

}
复制代码

结果如下:

 

posted @   Gazikel  阅读(115)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示