Java:子类能否重写父类中的属性值?

Java:子类能否重写父类中的属性值?


      首先,让我们来看一个例子,大家可以猜测下输出结果是什么。

1.父类
public class FatherClass {
	
	String info="FatherClass";
}

2.子类
public class SonClass extends FatherClass{
	
	String info="SonClass";
}

3.测试方法
public static void main(String[] args) {
	FatherClass father=new FatherClass();
	System.out.println(father.info);
		
	SonClass son=new SonClass();
	System.out.println(son.info);
		
	FatherClass son2=new SonClass();
	System.out.println(son2.info);
}

      上述代码的输出结果如下:

FatherClass
SonClass
FatherClass

      奇怪的是,我们确实创建了两个Sub对象,但是第二个输出的结果却是Super。这是因为上面的例子中定义了一个隐藏字段

在子类中,与父类中的字段具有相同名称的字段为隐藏字段,即使它们的类型不同。

      Within a class, a field that has the same name as a field in the superclass hides the superclass’s field, even if their types are different. Within the subclass, the field in the superclass cannot be referenced by its simple name. Instead, the field must be accessed through super. Generally speaking, we don’t recommend hiding fields as it makes code difficult to read.

      从上述定义中,我们可以知道成员字段不能像方法一样被重写。当子类定义具有相同名称的字段时,该子类仅声明一个新字段。超类中的字段是隐藏的。它没有被重写,所以它不能被多态访问。

      注意: 在子类中,父类中的字段不能通过其简单名称引用。相反,该字段必须通过父类访问。一般来说,我们不建议隐藏字段,因为它使代码难于阅读。


参考:

  1. https://mp.weixin.qq.com/s/Ovqb_F2vABeYWrfKCGE4-g
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页