3.3. 为什么字段不能被重写

这篇文章展示了在java中基本的面向对象概念—字段隐藏。

11.1 字段在java中可以被重写吗

让我们来看下下面的代码例子,它创建了一个子类的对象。一个被赋值为子类引用,另一个被赋值为父类引用。

package oo;
class Super {
    String s = “super”;
}
Class Sub extends Super {
   String s = “Sub”;
}

Public  class FieldOverriding {
    Public static void main (String [] args ) {
           Sub c1 = new Sub();
           System.out.println(c1.s);
           Super c2 = new Sub();
       System.out.println(c2.s);
}
//输出为
Sub
Super

11.2 隐藏属性而不是重写它们

在11.1中 这是个清晰的关于隐藏属性的定义。
在一个类中,如果一个属性和父类属性的名称同名,则隐藏父类的属性,即使它们的类型是不同的。 在子类中,父类属性不能被子类中被相同的名字所引用。相反,这个属性必须通过super来访问。
一般来讲,我们不建议使用隐藏属性,因为这使代码更难阅读了。
从这个定义来看,成员属性不能像方法一样被重写。当一个子类定义一个相同名称的属性的时候,这意味着子类声明了一个新的属性。
父类的属性被隐藏了。它不是重写,所以不能通过多态的方式被访问。

11.3 访问隐藏属性的方法

  1. 通过父类引用类型,父类的被隐藏的属性可以被访问,如下。
  • 通过转化你可以访问父类中隐藏的属性。
System.out.println((Super)c1.s);

你可能感兴趣的:(3.3. 为什么字段不能被重写)