复用类与final
复用类有两种方式:组合和继承。组合就是在新类里创建一个旧类的对象;继承可以扩展基类的功能。
一、继承
构造器:
- 基类有默认构造器:子类中无论有没有构造器,创建子类对象时,基类的构造器都会被调用,并且由最上层的基类开始!
- 基类没有默认构造器:或者想调用基类的非默认构造器时,在子类的构造器里使用关键字super()!
名称屏蔽:
- 当基类有多个重载方法时,子类里再定义一个该方法的重载不会覆盖基类中的方法,而是共存!
- 如果要覆写基类的方法,在方法前加上@override,这样可以告诉编译器我这个方法要覆写,如果不小心重载了会报错!
向上转型:
- 子类是基类的超集,因此java允许子类传参给基类为参数的方法。
二、Final关键字
final域:
通常指“这是无法改变的!”.
/** 1. 两个都是编译时常量,即不可改变 2. 第二种是典型的常量声明方式:public代表可用于包之外;static代表只有这一份;final代表这是常量;此时要用大写(static和final同时具备时) 3. 两者的区别是,第二种是存在静态存储区的,所以无论这个类创建多少个对象,值都是固定的;而第一种在创建新的对象时,如果使用随机数赋的值,会随机出一个新的不变的值 */ private final int valueOne = 1; public static final int VALUE_TWO = 2;
- 如果final指向一个对象的引用,则这个引用无法再指向其他对象,但这个对象本身是可以改变的!
空白final域(可以做到一个类中的final域根据对象不同而有所不同,又保证其不变的特性):
就是用final声明一个域时,不给他赋初值;但编译器要确保空白final域在使用前必须被初始化!
public class BlankFinal { private final int n; // 在构造器里对这个常量赋值,然后根据不同的构造器创建不同的对象,在每个对象里,这个域是恒定不变的! BlankFinal(){ n=1; } BlankFinal(int k){ n=k; } }
final方法:
- 当想把方法锁定,即该方法在继承类中被覆写,确保它在继承类中的含义与与基类一致时,使用!
- 将一个类定义为final,意味着这个类不能被继承!

浙公网安备 33010602011771号