02-接口interface 新花样
接口也能写实现 - 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' } }