Java學習1-子類實例化時調用父類構造函數時this指向
Java久疏戰陣,重新拾起碰到了不少問題,以前的基礎知識忘得差不多了,趁着不能出門多學習下。
子類通過new的形式實例化時,會調用父類的構造,那麼此時在父類中的this關鍵字指向的是誰呢?通過實際代碼來看看。
父類Animal
public class Animal {
private String name;
private Integer age;
public void print(){
System.out.println("super class");
}
public Animal(String name, Integer age) {
this.name = name;
this.age = age;
this.print();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
子類Cat
public class Cat extends Animal{
private String color;
public void print(){
System.out.println("sub class");
}
public Cat(String name,Integer age,String color) {
super(name,age);
this.color = color;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
}
測試類MainTest
public class MainTest {
public static void main(String[] args) {
Cat cat = new Cat("aa",12,"red");
}
}
輸出結構
sub class
從這個結構可見在父類構造函數中this關鍵字確實指向了子類的實例。
在父類的構造函數中判斷下this的類型
public Animal(String name, Integer age) {
this.name = name;
this.age = age;
this.print();
if(this instanceof Cat){
System.out.println("just is a cat !");
}
}
再次執行
sub class
just is a cat !
確實指向了子類。
更深層次的原理,我要再看看this的用法和存在繼承關係的類加載時的關係。