super
1. 用super 来访问父类中被子类覆盖的成员变量或者属性
子类一旦隐藏了继承的成员变量,那么子类创建对象就不在拥有该变量,该变量将归关键字super 所有,同样子类一旦隐藏了继承的方法,那么子类创建的对象就不能调用被隐藏的方法,该方法的调用有关键字super负责。
测试用例:
public class TestSuper {
public static void main(String[] args){
new ChildClass().f();
}
}
class FatherClass{
public int value;
public void f(){
value = 100;
System.out.println("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass{
public int value;
public void f(){
super.f(); //调用父类对象的普遍方法
value = 200;
System.out.println("ChildClass.value="+value);
System.out.println(value);
System.out.println(super.value);//调用父类对象的成员变量
}
}
运行结果:
FatherClass.value=100
ChildClass.value=200
200
100
2.使用super调用父类的构造方法
构造方法的第一句总是super() 来调用父类的构造方法 。当用子类的构造方法创建一个子类的对象时,子类的构造方法总是先调用父类的某个构造方法,也就是说如果子类的构造方法没有明显的指明使用父类的哪个构造方法,子类就调用父类的不带参数的构造方法。
记住:super永远位于构造方法的第一句 (可省略)
测试用例:
public class super2 {
public static void main (String[] args){
System.out.println("开始创建一个Student 对象");
new Student2();
}
}
class Person2{
public Person2(){
super();
System.out.println("创建Person");
}
}
class Student2 extends Person2{
public Student2(){
super();
System.out.println("创建Student");
}
}
运行结果:
开始创建一个Student 对象
创建Person
创建Student
final
final 可以用来修饰变量,方法,类
修饰变量: 变量一旦 被初始化便不可改变 相当于定义了一些常量
修饰方法: final方法在子类中不能被覆盖的方法 即不可重写
修饰类: final类是最终类 不能被任何类继承 如:String类