复用类与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,意味着这个类不能被继承!

 

posted @ 2016-03-23 15:17  lqzzang  阅读(168)  评论(0)    收藏  举报