1. Java中this
class="java">
this代表对象本身,利用this可以表示当前对象、调用属性、调用方法。
1. 普通的直接引用
2. 形参与成员名字重名,用this来区分
age是GetAge成员方法的形参,this.age是Person类的成员变量。this.output()调用方法。
class Person {
private int age = 20;
public Person() {
this.output();
}
public int getAge(int age) {
this.age = age;
return this.age;
}
public void output() {
System.out.println("初始化年龄:" + age);
}
}
public class PersonTest {
public static void main(String[] args) {
Person andrew = new Person();
System.out.println("Andrew年龄:" + andrew.getAge(18));
}
}
初始化年龄:20
Andrew年龄:18
3. 引用构造函数
this(age)调用public Person(int age)构造函数
class Person {
private int age;
private String name;
public Person(int age) {
this.age = age;
}
public Person(int age, String name) {
this(age);
this.name = name;
}
}
2. Java中super
super是指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。
1. 普通的直接引用
2. 子类中的成员变量或方法与父类中的成员变量或方法同名
这里调用了父类的成员变量和方法,如果没有super.getAge(),super.age的值默认为0
class Person {
int age;
void getAge() {
age = 20;
}
}
class OnePerson extends Person {
int age;
void getAge() {
age = 18;
super.getAge(); // super调用父类中的方法
System.out.println("person年龄:" + super.age); // super调用父类中的成员变量
System.out.println("one person年龄:" + age);
}
}
public class PersonTest {
public static void main(String[] args) {
OnePerson onePerson = new OnePerson();
onePerson.getAge();
}
}
person年龄:20
one person年龄:18
3. 引用构造函数
使用super()和super(age, name)分别调用父类不同的构造方法
class Person {
private int age;
private String name;
public Person() {}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
}
class OnePerson extends Person {
private int age;
private String name;
public OnePerson() {
super();
}
public OnePerson(int age, String name) {
super(age, name);
}
}
3. Java中this和super的对比总结
1. this():必须写在同一类构造方法的第一行,否则编译不通过
super():必须写在子类构造方法的第一行,否则编译不通过
2. this(param):调用本类中另一种形成的构造函数,同时保证this是构造函数的第一条语句
super(param):调用基类(父类)中的某一个构造函数,同时保证super是构造函数的第一条语句
3. this.param:如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名
super.param/super.method():引用当前对象的直接父类中的成员变量或方法,用来区分父类子类中相同的成员变量和方法
4. this和super不能同时出现在一个构造函数里面,也不能出现两个this或者super
5. this()和super()都指的是对象,所以,不可以在static环境中使用
6. 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字