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 */