📜  Java中不用super关键字访问超类方法和实例变量(1)

📅  最后修改于: 2023-12-03 14:42:42.930000             🧑  作者: Mango

Java中不用super关键字访问超类方法和实例变量

在Java中,我们通常使用super关键字来访问超类的方法和实例变量。然而,有时候我们可能不想使用super关键字,特别是在以下两种情况下:

  1. 当子类继承的超类方法没有被重写时,可以直接使用子类的对象实例来访问超类方法。
  2. 当子类和超类中出现同名的实例变量时,可以使用this关键字来访问子类的实例变量,而无需使用super关键字。
访问超类的方法

通常情况下,我们使用super关键字来调用超类的方法。例如:

public class SuperClass {
    public void display() {
        System.out.println("This is the super class.");
    }
}

public class SubClass extends SuperClass {
    public void display() {
        super.display(); // 使用super关键字调用超类的方法
        System.out.println("This is the sub class.");
    }
}

然而,在子类没有重写超类方法的情况下,可以直接使用子类的对象实例来访问超类的方法,而无需使用super关键字。例如:

public class SuperClass {
    public void display() {
        System.out.println("This is the super class.");
    }
}

public class SubClass extends SuperClass {
    // 没有重写display方法
}

public class Main {
    public static void main(String[] args) {
        SubClass subObj = new SubClass();
        subObj.display(); // 直接使用子类对象实例访问超类方法
    }
}

上述代码输出:

This is the super class.
访问同名的实例变量

当子类和超类中出现同名的实例变量时,通常我们使用super关键字来访问超类的实例变量。例如:

public class SuperClass {
    public int num = 10;
}

public class SubClass extends SuperClass {
    public int num = 20;
    
    public void display() {
        System.out.println(super.num); // 使用super关键字访问超类的实例变量
        System.out.println(this.num); // 使用this关键字访问子类的实例变量
    }
}

然而,我们也可以使用this关键字来访问子类的实例变量,而无需使用super关键字。例如:

public class SuperClass {
    public int num = 10;
}

public class SubClass extends SuperClass {
    public int num = 20;
    
    public void display() {
        System.out.println(this.num); // 使用this关键字访问子类的实例变量
    }
}

这样做的好处是可以更清晰地表达代码的意图。

希望以上信息能对你有所帮助!