Java接口

Java接口

Java接口的概述

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

只要符合规范标准,就可以给大家通用

生活举例

image-20230422184415582

接口的定义和基本格式

接口是多个类的公共规范

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

接口的格式

public interface 接口名称{

接口内容

}

接口可以包含

  1. 常量

  2. 抽象方法

  3. 默认方法

  4. 静态方法

  5. 私有方法

image-20230422184912525

接口中的抽象方法

抽象方法的定义

public abstract 返回值类型 方法名称(参数列表);

注意事项

  1. 抽象方法当中必须是两个固定的关键字:public abstract
  2. 这两个关键修饰符可以选择性忽略
  3. 抽象方法和正常的方法一样,随便定义

image-20230422185726981

代码示例

public interface demo9 {
    //全部写出修饰符
    public abstract void methodabs1();

    abstract void methodabs2();//省略一个

    public void methodabs3();//省略两个

    void methodabs4();//全部省略
    //上面的4个抽象方法是相同的
}

接口抽象方法的使用

1.接口不能直接使用必须要有一个实现类实现里面的抽象方法

使用格式

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

//...

}

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

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

如果一个类,没有覆盖接口里面的全部抽象方法那么这个类直接就是抽象类

image-20230422191219918

代码示例

接口

public interface Interface {
    public abstract void method1();
    public abstract void method2();
    public abstract void method3();
    public abstract void method4();

}

接口实现类

import java.sql.SQLOutput;

public class Interfaceimpl implements Interface{
    @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 Main3 {
    public static void main(String[] args) {
//        Interface one=new Interface(); //错误接口不能直接创建对象
        Interfaceimpl one =new Interfaceimpl();//但是接口的实现类可以创建对象
        one.method1();
        one.method2();
        one.method3();
        one.method4();

    }
}


Java接口默认方法

接口的默认方法是用来解决接口的升级问题的

如果一个接口进行了升级,相应的它的实现类也要进行升级,但是如果这个实现类已经,被很多地方使用了,不好升级,就需要默认接口

image-20230423094417378

如果将这个新添加的方法改成默认方法就可以解决这个问题.

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

//注意接口的默认方法是有方法体的

}

其中public可以省略不写

image-20230423181227309

  1. 接口的默认方法,可以通过接口实现类的对象,直接调用

  2. 接口的默认方法,可以被接口实现类进行覆盖重写.

image-20230423181528017

代码示例

接口

public interface Inteface {
    public abstract void method1();

    public abstract void method2();

    //    public abstract void method3();//如果在接口里面进行升级的话,就会导致两个实现类都要重写这个方法
    // .为了避免实现类对这个方法的重写我们要在接口里面,定义默认方法
    public default void method3() {
        System.out.println("我是默认方法");

    }
}

实现类1

import java.sql.SQLOutput;

public class InterfaceDemo01 implements Inteface {

    @Override
    public void method1() {
        System.out.println("Demo01我是方法1");
    }

    @Override
    public void method2() {
        System.out.println("Demo01我是方法2");
    }
}

实现类2

public class InterfaceDemo02 implements Inteface {
    @Override
    public void method1() {
        System.out.println("Demo02我是方法1");
    }

    @Override
    public void method2() {
        System.out.println("Demo02我是方法2");
    }
}

Main方法

public class Main {
    public static void main(String[] args) {
        InterfaceDemo01 one = new InterfaceDemo01();
        InterfaceDemo02 two = new InterfaceDemo02();//分别使用接口的两个实现类的定义
        one.method1();
        one.method2();
        two.method1();
        two.method2();
        System.out.println("===============");
        //如果对象调用的方法类里面没有的话,就会向上寻找接口里面有没有默认的方法
        one.method3();
        two.method3();

    }
}

接口的静态方法

静态方法的定义

概述

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

//方法体

}

public也是可以省略的

image-20230423183331845

静态方法的使用

不等通过接口是实现类的对象来调用接口中的静态方法

静态和对象没关系

image-20230423183909205

代码示例

静态方法接口

public interface InterfaceStatic {
    public static void method03()
    {
        System.out.println("我是一个静态方法");
    }
}

Main方法

public class Main1 {
    public static void main(String[] args) {
        //通过接口直接调用
        InterfaceStatic.method03();

    }
}

接口的私有方法

私有方法的定义

如果一个接口的默认方法有很多重复代码问题我们可以考虑将这个重复代码放到这个接口的一个方法里面.不过这个接口里面的方法应该是私有的不应该被它的实现类所继承

私有方法

  1. 普通私有方法

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

{

//方法体

}

  1. 静态私有方法

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

{

//方法体

}

代码实现

如果一个接口里面的很多默认方法之间有很多重复代码,这时候就需要私有方法来,代替这些重复代码

接口

public interface Interface {
    public default void method01()
    {
        System.out.println("我是默认方法1");
        common();
    }
    public default void method02()
    {
        System.out.println("我是默认方法2");
        common();
    }
    private void common()
    {
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }
}

实现类

public class Interfaceimp implements Interface{

}

主函数

public class Main10 {
    public static void main(String[] args){
        Interfaceimp one = new Interfaceimp();
        one.method01();
        one.method02();
    }
}

如果一个接口里面的很多静态方法之间有很多重复代码,这时候就需要私有静态方法法来,代替这些重复代码

接口

public interface InterfaceStatic {
    public static void method01()
    {
        System.out.println("我是静态方法1");
        common();
    }
    public static void method02()
    {
        System.out.println("我是静态方法2");
        common();
    }
    private static void common()
    {
        System.out.println("AAA");
        System.out.println("BBB");
        System.out.println("CCC");
    }
}


静态接口没有是实现类

public class Main1 {
    public static void main(String[] args) {
        InterfaceStatic.method01();
        InterfaceStatic.method02();//调用静态接口里面的方法


    }
}

接口当中的常量

接口中也可以定义"成员变量",但是必须使用public static final三个关键字进行修饰.

final说明不可改变

1.接口当中的常量可以省略public static final

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

3.接口中常量的名称,使用完全的大写字母命名(推荐)

image-20230425183412620

接口

public interface Interface {
    public static final int NUM = 100;//接口当中的常量使用public static final修饰

}

Main方法

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        System.out.println(Interface.NUM);//打印接口中的常量


    }
}

接口内容小结

[]里面的是可以省略的

image-20230425184110592

posted @ 2023-04-22 19:45  harper886  阅读(30)  评论(0编辑  收藏  举报