[18/12/01]super 关键字和final 关键字
一、super 关键字
1、super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。
代码示例:
1 class FatherClass //父类 2 { 3 public int value; 4 5 public void f(){ 6 value=100; 7 System.out.println("FatherClass.value= "+value); 8 } 9 } 10 11 class ChildClass extends FatherClass //子类 12 { 13 public int value; 14 15 public void f(){ //重写父类的f()方法 16 super.f();//调用父类对象的普通方法f() 用super 17 value=200; 18 System.out.println("ChlidClass.value="+value); 19 20 System.out.println(value);//子类的 value 21 System.out.println(super.value);//父类的 value 24 } 25 } 29 public class Test_1201_01 30 { 31 public static void main(String[] args) 32 { 33 new ChildClass().f(); 35 36 } 37 38 39 }
2、若是构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。这里的super()可以省略。
代码示例:
1 //测试super 的第二个用途 2 //若是构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法 3 class FatherClass//父类 4 { 5 public FatherClass() //父类的无参构造方法 6 { 7 //supr(); 也有这句 会向上追溯 到Object类 8 System.out.println("父类的构造方法"); 9 10 } 11 } 12 13 class ChildClass extends FatherClass 14 { 15 public ChildClass() 16 { 17 // super(); 默认有这句,调用父类的构造方法 18 System.out.println("子类的构造方法"); 19 } 20 } 21 22 public class Test_1201_02 23 { 24 public static void main(String[] args) 25 { 26 new ChildClass(); //显然只是对子类创建个对象,但会输出2句。它调用了父类的无参构造方法 27 28 } 29 }
二、final关键字
1. 修饰变量: 被他修饰的变量不可改变。一旦赋了初值,就不能被重新赋值。 如: final int MAX_SPEED = 120;
2. 修饰方法:该方法不可被子类重写。但是可以被重载! 如 : final void study(){}
3. 修饰类: 修饰的类不能被继承。比如:Math、String等。 如:final class A {}
final修饰方法如图所示。

final修饰类如图所示。


浙公网安备 33010602011771号