调用了自己这个类的另外一个构造方法
this(name,school,”beijing”);
参数写错调整过来了
Student_LianXi_29 s1 = new Student_LianXi_29(“C”, “S1”);
本来堆内存中的“C”和“beijing”应该存在data seg里面,应该是通过引用指向data seg里面这个两个值的,但是为了方便看所以才这么画的
//第二个构造方法
Student_LianXi_29(String n,String l,String school) {
//设定Person_LianXi_29的private String name;和private String location;
super(n,l);
this.school = school;
}
调用完父类的构造方法 执行完 super(n,l);
//第二个构造方法
Student_LianXi_29(String n,String l,String school) {
//设定Person_LianXi_29的private String name;和private String location;
super(n,l);
this.school = school;
}
执行this.school = school;时
下面的这个方法执行结束时
//第二个构造方法
Student_LianXi_29(String n,String l,String school) {
//设定Person_LianXi_29的private String name;和private String location;
super(n,l);
this.school = school;
}
//第二个构造方法完成后返回给this(name,“beijing”,school);
所以第一个构造方法结束
//第一个构造方法
Student_LianXi_29(String name,String school) {
//调用了自己这个类的另外一个构造方法
//第一个构造方法调用了第二个构造方法
//第一个构造方法里面的值把第二个的构造方法的值初始化了
this(name,“beijing”,school);
//把name传给n
//把"beijing"传给l
//把school传给school
}
package pack03.TestTeacher;
class Person {
private String name;
private String location;
Person(String name) {
this.name = name;
location = "beijing";
}
Person(String name, String location) {
this.name = name;
this.location = location;
}
public String info() {
return "name: " + name + " location: " + location;
}
}
class Student extends Person {
private String school;
// 第一个构造方法
Student(String name, String school) {
// 调用了自己这个类的另外一个构造方法
// 第一个构造方法调用了第二个构造方法
// 第一个构造方法里面的值把第二个的构造方法的值初始化了
this(name, "beijing", school);
// 把name传给n
// 把"beijing"传给l
// 把school传给school
}
// 第二个构造方法
Student(String n, String l, String school) {
// 设定Person_LianXi_29的private String name;和private String location;
super(n, l);
this.school = school;
}
@Override
public String info() {
return super.info() + " school: " + school;
}
}
class Teacher extends Person {
private String capital;
// 第一个构造方法
Teacher(String name, String capital) {
this(name, "beijing", capital);
}
// 第二个构造方法
Teacher(String n, String l, String capital) {
//交给父类去处理
super(n, l);
this.capital = capital;
}
@Override
public String info() {
return super.info() + " capital: " + capital;
}
}
public class TestTeacher {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person("A");
Person p2 = new Person("A", "shanghai");
Student s1 = new Student("C", "S1");
Student s2 = new Student("C", "shanghai", "S2");
System.out.println(p1.info());
System.out.println(p2.info());
System.out.println(s1.info());
System.out.println(s2.info());
Teacher t1 = new Teacher("D", "Professor");
System.out.println(t1.info());
}
}