class Person {
private String name;
private int age;
public Person() {}
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
class Student extends Person {
public Student() {}
public Student(String name,int age) {
super(name,age);
}
}
class ExtendsTest4 {
public static void main(String[] args) {
Student s1 = new Student();
s1.setName("二哈");
s1.setAge(10);
System.out.println(s1.getName()+"---"+s1.getAge());
Student s2 = new Student("二哈",10);
System.out.println(s2.getName()+"---"+s2.getAge());
}
}
子類實例化過程即第一個方法,先調用父類的靜態方法(如果有的話),接著初始化成員變量如private String name = "zhangsan"(如果有的話),然後調用父類的構造方法,接下來調用子類的同父類步驟,先執行靜態代碼,再初始化成員變量,最後調用子類的構造方法即new Student();
第一個方法與第二個方法的差別只是,第一個方法調用的都是父類、子類的默認構造方法,而第二個調用帶參的構造方法,不懂得話可以在代碼裡把對應方法的日志打印出來這樣就懂了。