1 package cn. tju. acculation. keywords; 2 3 4 public class ThisAndSuper { 5 6 public static void main( String[] args ) { 7 Student s1 = new Student( "zhangsan" , 14) ; 8 s1 .print (); 9 10 Student s2 = new Student( "lisi" , 12, "23" ); 11 s2 .print (); 12 } 13 } 14 15 /*this关键字 16 1)在类的内部代表该类的对象。 17 2)this的第二种用法,是用在构造函数里的。当在构造器里要调用该类的其他构造器时,就用this。this必须放在第一行 18 19 super关键字 20 1)显式的调用父类的方法,当从一个类继承时,子类和父类都有一个同名方法,也就是子类覆盖了父类的方法,可是又想调用父类的方法,那么就要用super。 21 2)用在构造器,和this的用法一样,super也可以用在构造器,this是调用自己的其他构造器,super是调用父类的构造器 22 23 super和this用在构造器的话,前者表示调用父类的构造器,后者表示调用本类的其他构造器,他们两个都必须是写在构造器里的第一行。*/ 24 25 26 class Person { 27 private String name ; 28 private int age ; 29 30 public Person () { 31 this ("" , 0) ;//使用this调用本类的其他构造器,必须置于此构造器的第一行 32 System. out. println( "Person类空参构造器-------" ); 33 } 34 35 public Person (String n , int a) { 36 name = n; 37 age = a; 38 System. out. println( "Person类·有参·构造器-------" ); 39 } 40 41 public String getName () { 42 return name; 43 } 44 45 public void setName (String name ) { 46 this. name = name ; 47 } 48 49 public int getAge () { 50 return age; 51 } 52 53 public void setAge ( int age) { 54 this. age = age ; 55 } 56 } 57 58 class Student extends Person { 59 private String id ;//学号 60 61 public Student (String name , int age) { 62 super (name , age) ;//必须写在第一行,子类无法直接访问父类的私有属性,所以通过调用父类的构造器类初始化属性 63 System. out. println( "Student类含两个参数的构造器-------" ); 64 } 65 66 public Student (String name , int age, String id ) { 67 this (name , age) ;//因为本类已经有个构造器初始化name和age了,所以交给他来做就行了,也必须写在第一行 68 this. id = id ; 69 System. out. println( "Student类含三个参数的构造器-------" ); 70 } 71 72 public void print () { 73 System. out. println( "Student 的名字:" +getName ()+ ";年龄:" +getAge ()+ ";学号是:" +id ); 74 } 75 } 76 /* 77 总结 78 1、super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) 79 80 2、this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) 81 82 3、super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时) 83 84 如:super.变量名 85 86 super.成员函数据名(实参) 87 88 4、this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名) 89 90 */