在Java中访问超类的覆盖字段?

时间:2016-02-26 10:02:08

标签: java inheritance superclass

我已经在我的子类中命名了一个与我的超类相同的字段。我基本上覆盖了我父类中的字段。

如何将字段与基类和扩展类中具有相同名称的字段区分开来?

1 个答案:

答案 0 :(得分:3)

关键字super大部分时间用于访问超类方法,大多数时候是父类的构造函数。

关键字this大部分时间用于区分类的字段与方法参数或具有相同名称的局部变量。

但是,您也可以使用super来访问超类的字段,或this来调用方法(由于所有调用都是虚方法调用,这是多余的),或者来自同一类的另一个构造函数。

以下是访问字段的用法示例。

public class Base {

    public int a = 1;
    protected int b = 2;
    private int c = 3;

    public Base(){

    }
}

public class Extended extends Base{

    public int a = 4;
    protected int b = 5;
    private int c = 6;

    public Extended(){

    }

    public void print(){
        //Fields from the superclass
        System.out.println(super.a);
        System.out.println(super.b);
        System.out.println(super.c); // not possible

        //Fields from the subclass
        System.out.println(this.a);
        System.out.println(this.b);
        System.out.println(this.c);
    }
}

public static void main(String[] args) {
        Extended ext = new Extended();
        ext.print();
    }

您始终可以重命名子类中的字段以避免冲突,但如果要将方法参数或局部变量与超类字段区分开来,请使用super,因为您将使用this