package this_super; /* *super:①父类对象的构造方法 * ②父类对象的引用 *this: ①子类对象的构造方法 * ②子类对象的引用 *------------------------注:每个对象中都有这两个引用,因为每个类都是Object类的直接或间接子类----------------- */ //一、super的用法: /*1、在子类的构造方法中,必须通过super的形式调用父类的构造方法, * 如果没有调用,JVM会以"super()"的形式调用父类的无参构造方法 * 注意!以super对父类构造方法的调用必须是子类构造方法的第一个语句!!!!!!!!!!! * 2、在子类中,表示父类的引用 */ /********下面来看一个例子**********/ class Person { private String name; public Person() { name = "unknow"; } public Person(String n) { name = n; } public String getName() { return name; } public void sayHello() { System.out.println("大家好!我是" + name); } } class Student extends Person { private int sid; public Student() { super();//看!这是MyEclipse中自动生成的,说明了“在子类的构造方法中,必须通过super的形式调用父类的构造方法, //如果没有调用,JVM会以"super()"的形式调用父类的无参构造方法” sid = -1; } public Student(String name,int id) { //sid = id;//我试了下,把这句话放这里是编译不过去的 super(name); sid = id; } public void sayHello() { System.out.println("大家好!我是学生" + super.getName());//在子类中,super表示父类的引用 } } public class Test { public static void main(String[] args) { Person p = new Person("ZhangSan"); p.sayHello(); Student s1 = new Student(); s1.sayHello(); Student s2 = new Student("LiSi",001); s2.sayHello(); } } /*运行结果: 大家好!我是ZhangSan 大家好!我是学生unknow 大家好!我是学生LiSi */ package this_super; //二、this的用法: /*1、表示本类的构造 * 2、表示本类当前对象的引用 */ /********下面来看一个例子**********/ class Person2 { private String name; public Person2() { //name = "unknow"; //this(name); //注意!!上面这种写法编译是通不过的,因为Constructor call must be the first statement in a constructor //this(); //注意!!上面这种写法编译也是通不过的,因为这是一个无限递归调用,而这在Java中是不允许的 this("unknown");//调用本类当中的构造方法Person(String name) } public Person2(String name) { this.name = name;//this表示本类当前对象的引用 } public String getName() { return name; } public void sayHello() { System.out.println("大家好!我是" + name); //上面这句话也可以写成System.out.println("大家好!我是" + this.getName()); } } public class Test2 { public static void main(String[] args) { Person p = new Person("ZhangSan"); p.sayHello(); } } //运行结果:大家好!我是ZhangSan