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 */
转载于:https://www.cnblogs.com/QuentinYo/p/3302135.html