浅理解Java中的接口

接口

接口就是多个类的公共规范,它是一种引用类型。接口中可以包含的内容:常量、抽象方法、默认方法、静态方法私有方法。接口的定义格式为:

public interface 接口名称{
	...
}

接口使用

  • 接口不能直接使用,必须有一个实现类实现接口,格式:

    public class 实现类名称 implements 接口名称{
        ...
    }
    
  • 接口的实现类必须覆盖重写接口中所有的抽象方法

  • 创建实现类的对象,进行使用

  • 如果实现类并没有覆盖重写接口中所有的抽象方法,那么这个实现类自己就是抽象类

    public interface InterfaceAbs {
    	// 抽象方法,接口中抽象方法的关键字必须是 public abstract,可选择性省略
        public abstract void methodAbs();
    }
    
    // 接口实现类
    public class InterfaceTest implements InterfaceAbs{
    
        @Override
        public void methodAbs() {
            System.out.println("override abstract method...");
        }
    
    }
    
    public class InterfaceMain {
        public static void main(String[] args) {
            // 创建实现类对象
            InterfaceTest inter = new InterfaceTest();
            inter.methodAbs(); // // override abstract method...
        }
    }
    

默认方法

接口中默认方法定义:

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

作用:解决接口升级问题,在接口中添加方法而不用在实现类中修改。可以通过接口实现类对象直接调用,也可以被实现类覆盖重写。


静态方法

接口中静态方法格式:

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

静态方法可以通过接口名称直接调用。


私有方法(Java - 9之后的版本支持)

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

    private 返回值类型 方法名称(参数列表){
    	...
    }
    
  • 静态私有方法:解决多个静态方法之间的重复代码问题,格式:

    扫描二维码关注公众号,回复: 11052675 查看本文章
    private static 返回值类型 方法名称(参数列表){
        ...
    }
    

成员变量

接口中的成员变量必须使用public static final三个关键字修饰,从效果上看就是接口的常量。格式:

public static final 数据类型 常量名称 = 数据值

NOTE:

  • 接口中的常量可以省略public static final
  • final关键字表示一旦赋值不可改变!
  • 接口中的常量必须进行赋值,不能不赋值
  • 接口中常量的名称使用完全大写的字母,用下划线进行分隔

接口注意事项:

  • 接口中不能有静态代码块

  • 接口不能有构造方法

  • 一个类的直接父类是唯一的,但一个类可以同时实现多个接口

    public class InterfaceImplemet implements InterfaceA, InterfaceB{
    	...
    }
    
  • 如果实现类所实现的多个接口当中存在重复的抽象方法,只需要覆盖重写一次即可

  • 如果实现类没有覆盖重写所有接口中的抽象方法,那么实现类就必须是一个抽象类

  • 如果实现类所实现的多个接口中存在重复的默认方法,那么实现类一定要对有冲突的默认方法进行覆盖重写

  • 一个类如果直接父类当中的方法和接口当中的默认方法重名,优先使用父类中的方法

  • 类于类之间是单继承的,直接父类只有一个

  • 类与接口之间是多实现的,一个类可以实现多个接口

  • 接口与接口之间是多继承的

  • 多个父接口中的抽象方法如果重复没关系

  • 多个夫接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,而且带着default关键字


public interface InterfaceAbs {

    // 成员变量
    public static final int NUMBER = 10;

    // 抽象方法,接口中抽象方法的关键字必须是 public abstract,可选择性省略
    public abstract void methodAbs();

    // 默认方法
    public default void defaultMethod(){
        System.out.println("Interface default method...");
    }

    // 静态方法
    public static void methodStatic(){
        System.out.println("static method...");
    }

    // 私有方法
    // private void methodPrivate(){}
    // private static void methodStaticPrivate(){}
}

// 接口实现类
public class InterfaceTest implements InterfaceAbs{

    @Override
    public void methodAbs() {
        System.out.println("override abstract method...");
    }

}

public class InterfaceMain {
    public static void main(String[] args) {
        // 创建实现类对象
        InterfaceTest inter = new InterfaceTest();
        inter.methodAbs(); // override abstract method...

        // 接口中默认方法使用
        // 如果实现类中没有,则向上找接口中的默认方法
        inter.defaultMethod();  // Interface default method...

        // 静态方法使用,直接通过接口名称调用
        InterfaceAbs.methodStatic();  // static method...

        // 成员变量使用:通过接口名直接使用
        System.out.println(InterfaceAbs.NUMBER); // 10
    }
}

发布了461 篇原创文章 · 获赞 122 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/Forlogen/article/details/105645751