一、JDK8开始新增的方法
默认方法不是抽象方法,所以不强制被重写:
但是如果被重写,就要去掉default关键字:
public可以省略,但是default不可以省略:
public是灰色的,代表可以省略
但是default是橙色的,代表不可以省略:
idea会认为可能想写的是一个abstract类的方法,,没有写的话,idea会将其当作一个abstract类方法所以default不能省略:
如果实现了多个接口,多个接口存在相同名字的默认方法,子类就必须对该方法进行重写:(因为如果不重写的话,就不知道调用的是哪个接口的show方法)
重写后:
静态方法不能被重写:
这样写不叫重写:只是刚好在InterImpl中有一个重名的show方法:
调用接口中的静态方法:
子类把从父类继承下来的虚方法表里面的方法进行覆盖了,这才叫重写,但是私有的,最终的,静态的是不会添加到虚方法表中,所以不叫重写。
二、JDK9开始新增的方法
在JDK9以前只有这种方式:如果有重复代码,只能重写写一个方法,然后再调用show3方法;
普通的私有方法,给默认方法服务的
静态的私有方法,给静态方法服务的:
三、接口的应用:
四、适配器设计模式:
interAdapter类代码:
public abstract class interAdapter implements interA{
//设为abstract,为了防止对interAdapter创建对象,因为里面都是重写的空方法,所以创建对象没有意义;
@Override
public void method1() {
}
@Override
public void method2() {
}
@Override
public void method3() {
}
@Override
public void method4() {
}
@Override
public void method5() {
}
@Override
public void method6() {
}
@Override
public void method7() {
}
@Override
public void method8() {
}
@Override
public void method9() {
}
@Override
public void method10() {
}
}
interImpl类代码:
public class interImpl extends interAdapter{
//我需要用哪个方法,就重写哪个方法就可以了
@Override
public void method5(){
System.out.println("只需要method5方法");
}
}
inter类代码:
public interface interA {
public abstract void method1();
public abstract void method2();
public abstract void method3();
public abstract void method4();
public abstract void method5();
public abstract void method6();
public abstract void method7();
public abstract void method8();
public abstract void method9();
public abstract void method10();
}
如果实现类还有父类,由于Java中不能多继承,那么可以让中间类去继承想要的类就可以了
五、内部类:
内部类可以直接访问外部类的成员,包括私有:
外部类要访问内部类的成员,必须创建对象:
内部类的应用有很多,下面列举几个常见的应用场景:
1. 实现回调函数:内部类可以通过将自身作为参数传递给外部类的方法,用于实现回调函数。当某个条件满足时,外部类调用内部类的方法来完成特定的操作。
2. 实现事件监听器:内部类可以实现事件监听器接口,在外部类中注册监听器对象,当特定的事件发生时,内部类的方法会被调用。
3. 封装复杂逻辑:内部类可以访问外部类的私有属性和方法,可以用于封装复杂的逻辑实现。内部类可以直接访问外部类的私有属性,并且可以和外部类进行私有操作,减少了类之间的耦合程度。
4. 实现迭代器:内部类可以作为外部类的成员,实现迭代器接口,可以用于遍历外部类中的数据结构。
5. 多线程编程:内部类可以作为线程的子类或实现线程接口,用于实现多线程编程。
总的来说,内部类的应用非常广泛,能够提供更加灵活和方便的编程方式,增加代码的可读性和可维护性。