写在前面的话:
把这两个关键字放在一起讲,没什么特别用意,就是想聊聊这些关键字。我不要你觉得,我要我觉得,嗯,就是这样……
——不积跬步无以至千里,不积小流无以至江海。
一、default 关键字
1、为什么?
答:现有一个接口A,实现类a、b、c、d均实现了A接口。A接口中有方法sayHello(),当因为业务需求,需要对sayHello()方法进行修改时,则只能分别修改a、b、c、d共计4个接口,若有更多的实现类,则修改更多。故default method被引入。
2、是什么?
答:文档中提到:default methods enable you to add new functionality to the interfaces of your libraries and ensure binary compatibility with code written for older versions of those interfaces.
即:默认方法能够向库中添加新的功能,并且能够确保与旧版本的兼容。
3、示例:
1) 此时不实现default方法体:
/**************************************************** * * 汽车接口 * * * @author Francis * @date 2019/8/26 10:37 * @version 1.0 **************************************************/ public interface Car { /** * 品牌 */ void brand(); /** * 轮子数 */ default public void wheelCount(){ System.out.println("有4个轮子"); } }
/**************************************************** * * 迈腾汽车 * * * @author Francis * @date 2019/8/26 10:39 * @version 1.0 **************************************************/ public class Magotan implements Car { @Override public void brand() { System.out.println("迈腾,大众旗下品牌"); } }
@Test public void method4(){ Car car = new Magotan(); car.brand(); car.wheelCount(); }
------------------------测试开始------------------------ 迈腾,大众旗下品牌 有4个轮子 ------------------------测试结束------------------------
2)再用接口去实现default方法体:
/**************************************************** * * 迈腾汽车 * * * @author Francis * @date 2019/8/26 10:39 * @version 1.0 **************************************************/ public class Magotan implements Car { @Override public void brand() { System.out.println("迈腾,大众旗下品牌"); } @Override public void wheelCount() { System.out.println("加备胎,有5个轮子"); } }
------------------------测试开始------------------------ 迈腾,大众旗下品牌 加备胎,有5个轮子 ------------------------测试结束------------------------
二、final 关键字
1、用法:
1)修饰类:该类不可被继承。该类成员变量根据实际需要设计为final;该类方法都会被隐式的指定为final方法。例如:工具类一般被设计为final类。如图:
2)修饰方法:被修饰的方法不可被重写。注:当方法被private修饰时,会被隐式的指定为final方法。
3)修饰成员变量:
a).必须赋予初始值,并且只能初始化一次。
b).如果该成员变量是基本类型,则这个成员变量的值不能改变。
c).如果该成员变量是引用类型,则这个成员变量引用的地址不能修改,但所指向的对象的内容是可改变的。