使用super或在子类中访问超类中的属性?

时间:2012-08-07 20:20:47

标签: java

对于在超类中定义的属性的值,在子类中使用相同的属性并且属性被定义为protected,那么使用super或者这没有任何区别对吗? 那么为什么语言真的有这些访问属性的方式?是否存在具有不同值的方案。

    class A{ protected int a = 15; 
    }

    class B{ 
    public void printA()
{
    System.out.print(super.a) // prints 15
    System.out.print(this.a) // prints 15
 }   

}

1 个答案:

答案 0 :(得分:4)

情况下,它没有任何区别。但是,只要您更改为方法而不是变量,并在B中引入另一个隐藏A中的方法的方法,然后就会产生影响:

class A { 
    protected int a = 15; 
}

class B extends A { 
    private int a = 10;

    public void printA() {
       System.out.println(super.a); // prints 15
       System.out.println(this.a); // prints 10
    }
}

这种方法比使用字段更常见 - 通常,重写实现需要将超类实现作为其实现的一部分来调用:

public void foo() {
    super.foo();
    // Now do something else
}

我个人建议避免非私人字段,此时字段部分变得无关紧要。

有关遮蔽的更多信息,请参阅section 6.4.1 of the JLS