`

Java中this与super

    博客分类:
  • Java
阅读更多
1. Java中this

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关键字

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics