接口也能写实现 - default
JDK8:我要实现流,我要让集合类实现stream() 方法
我:你准备怎么实现
JDK8: 我要在interface Collection 上新加一个方法 stream
我:Collection 上加一个方法可是大事啊,Collection 在java里面可是有很大的势力的啊,麾下实现类数不胜数,世界各地都在使用实现类,你加一个方法,所有的实现类都要进行实现。你自家人 arrayList,linkedlist,map还好说,外家兄弟怎么说,俗话说 断人财路,如同杀人父母, 别人一人一口吐沫就能淹死你。
JDK8: …
JDK8: …
JDK8: 那我就默认实现,interface里面也可以写方法,但是要使用 defualt 声明。使用defualt 定义的方法,实现类可以默认不进行实现,这样就能解决问题,就能不被口诛笔伐了 😊😊
我: 厉害了呀,这样的话是不是也可以做模版模式,抽象一个固定的模版方法为default,差异化的方法让他的实现类实现就行?
JDK8: 牛啊
public interface NameInterface {
String name();
//defualt 定义模版方法
default void test() {
System.out.println("all init");
System.out.println("my name is " + name());
System.out.println("all doing something");
}
class Dog implements NameInterface {
@Override
public String name() {
return "dog";
}
}
public static void main(String[] args) {
//匿名内部类
NameInterface cat = new NameInterface() {
@Override
public String name() {
return "cat";
}
};
NameInterface dog = new Dog();
System.out.println(dog.name());
System.out.println(cat.name());
}
}
接口也能private - JDK9
JDK9: 接口类一版都是共有方法,但是我的上一辈引入了defualt 关键字之后,接口也能实现方法了, 这个也随之造成了方法的公开和私有性,有一些接口上的函数是不需要公开对外的,那就在我这里实现吧! 接口 interface 的private 私有化接口!!
public interface PrivateInterface {
private String pm() { // private 自动 default
return "self private";
}
default void test() {
System.out.println(pm());
}
class Demo implements PrivateInterface {}
public static void main(String[] args) {
Demo demo = new Demo();
demo.test();
// demo.pm(); 'pm()' has private access in 'com.hjh.test.PrivateInterface'
}
}