这篇文章展示了在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 访问隐藏属性的方法
- 通过父类引用类型,父类的被隐藏的属性可以被访问,如下。
- 通过转化你可以访问父类中隐藏的属性。
System.out.println((Super)c1.s);