这里对final关键字进行总结。 final类 当类声明为final时,就不能定义这个类的子类。因为final类的类无法定义子类,所以final类声明的所有方法不会被覆盖(override)。 final方法 若将实例方法声明为final时,这个方法无法被子类所覆盖(override)。 若将类方法(static方法)声明为final时,这个方法无法被子类所隐藏(hide)。对隐藏这个术语不熟,本文最后会加上。 final字段(final属性) final字段的值只能指定一次。 final实例字段的值只能在定义时或者在构造器中指定。 如: class A{

final int i = 1;

} class A{

final int i;

public A(){

this.i = 2;

}

} final类字段的值只能在定义是或者在static块(静态初始化块)中指定。 class A{

static final int i = 12;

} class A{

static final int i;

static{

i = 12;

}

} final局部变量和final参数 final局部变量的值只能指定一次。 final参数的值在方法被调用时,由实参指定,不能再次指定(实际上也满足被指定一次的原则)。 下面对java中类的继承中的覆盖(override)和隐藏(hide)进行总结。 在《Java核心技术卷一》中对隐藏是采用的访问限定符(如public,private,protected)来实现的。这里的隐藏不是采用访问限定符来实现的,而是采用子类和父类有同名的类方法和字段(实例字段和静态字段)来实现的。在实际编程中,隐藏一般只用于类方法,即父类的类方法被子类中同名(这里的同名指方法名和参数都一样,其实返回值也必须一样,可以试一试)的类方法隐藏。 这里继续总结一下:
  1. 子类可以覆盖父类的实例方法(方法名、参数和返回值都一样),另外,这里还有一个重载(overload)的概念,重载是一个静态的概念,是在编译时根据方法名和参数来确定的,重载是一个类自身的一个属性,和继承没有关系。
  2. 子类可以隐藏父类的类方法(方法名、参数和返回值都一样)
  3. 子类可以隐藏父类的字段(实例字段和静态字段)(通过在子类中定义字段名相同(类型可和父类不一样)的字段即可)。
覆盖是动态的概念,是在运行时决定的。重载和隐藏是静态的概念,是在编译时决定的。 参考:
  1. 《Java多线程设计模式》中国铁道出版社 2005

文章来源:http://localhost/wp2/?p=61