Java 接口总结

接口简而言之就是定义了一套公共规范,在面向对象设计中有很大的用处
接口可以包含的内容:常量,抽象方法,默认方法,精态方法,私有方法。

抽象方法

语法:(两个关键词可以不写 但是不推荐 必须保证没有方法体{})

public interface Demo1 {
    public abstract void test();
}

定义好接口后需要通过类来去重写覆盖接口的函数

package day1;
public class Demo2 implements Demo1 {
    @Override
    public void test() {
        System.out.println("hh");
    }

}

默认方法

如果只使用抽象方法,那么在接口添加新方法时会导致所有实现该接口的类都必须保证实现新添加的方法,十分的麻烦
这时可以使用默认方法,接口新添加后实现类没有写也不会保证
语法(注意有方法体{})

package day1;
public interface Demo1 {
    public default void test(){
        System.out.println("hh");
    };
}

静态方法

记住不能通过实现类的调用,直接通过接口调用

私有方法

jdk9才有
由于默认方法可能会存在代码重复情况,可以再包装成一个函数。同时这个函数应该只服务于默认方法而不服务于实现类,所以用到了私有方法来实现这种情况。
普通私有方法:解决多个默认方法代码重复的问题
静态私有方法:解决多个静态方法代码重复的问题
例子:

package day1;
public interface Demo1 {
    public default void test(){
        System.out.println("这是方法1");
        demo();
//将重复代码包装成函数
    };
    public default void test1(){
        System.out.println("这是方法2");
        demo();
    }
    private void demo(){
//私有方法
        System.out.println("代码重复的部分交给我!");
    }
}

接口中的定义变量

记住接口无论你怎么定义,都只能是常量。值定义后就无法修改!(默认加上了 public static final3个关键词)

类实现接口的一些要点

类可以实现多个接口(即实现了多继承)
如果接口中存在重复的抽象方法定义,那么只会覆盖重写一次
(我妈叫我吃饭 我爸叫我吃饭 那我就吃饭一次就完事了)

但是如果存在重复的默认方法,必须对该方法进行覆盖重写
如果类没有完全覆盖重写所有接口定义的函数,那么该类必须是抽象类

如果父类方法和接口的默认方法产生冲突,优先使用父类的方法(毕竟是亲生爸爸比较NB)

接口继承接口

接口可以对接口进行多继承
和上面一样,对于继承多接口时出现多个一样抽象方法时不用管(抽象的啥都没有 能怎么冲突)
但是对于出现多个一样的默认方法时,也必须实现覆盖重写

posted @ 2021-02-14 15:39  一个经常掉线的人  阅读(95)  评论(0)    收藏  举报