super注意点: 1. super调用父类的构造方法,必须在构造方法的第一个 2. super 必须只能出现在子类的方法或构造方法中 3. super 和this 不能同时调用构造方法 (因为两者都必须出现在构造器的第一行,但第一行只有一个) Vs this: 1. 代表的对象不同 this: 本身调用着 的对象 super: 代表父类对象的应用 2. 前提 this: 没有继承可以使用 super: 只能在继承条件下使用 3. 构造方法 this: 本类的构造 super: 父类的构造
构建一个父类:
1 public class Person { 2 //父类构造器 : 不需要返回值,变量名与类名相同 3 public Person() { 4 System.out.println("person执行了"); 5 } 6 7 protected String name = "张三";//定义一个变量 8 //定义一种方法: 9 public void print(){ 10 System.out.println("person"); 11 } 12 }
构建一个子类
1 public class Student extends Person { 2 //子类构造器,会先调用父类构造器 3 public Student() { 4 // 默认有一个 super(); 5 System.out.println("student执行了"); 6 } 7 //定义一个子类的变量 8 private String name = "zhangsan"; 9 //定义一个子类的方法 10 public void print() { 11 System.out.println("student"); 12 } 13 //定义一个测试方法: 判断本体,this,和super分别调用的哪种方法 14 public void said1(){ 15 print(); 16 this.print(); 17 super.print(); 18 } 19 //定义一个测试方法: 判断本体,this,和super分别调用的哪个变量 20 public void said(String name){ 21 System.out.println(name); 22 System.out.println(this.name); 23 System.out.println(super.name); 24 } 25 }
调用:
1 import com.demo03.Student; 2 3 public class Application { 4 public static void main(String[] args) { 5 Student student = new Student(); 6 7 student.said("zs"); 8 student.said1(); 9 10 } 11 }
结果:
1 person执行了 2 student执行了 3 zs 4 zhangsan 5 张三 6 student 7 student 8 person