vue项目接口域名动态的获取方法
367
2023-03-09
Java中方法的重写与成员变量的隐藏
这篇文章讨论了java面向对象概念中一个基本的概念–Field Hiding(隐藏成员变量)
在讨论这个问题之前,我们看一段特别特别简单的代码,请问一下方法的数据结果是什么?
/**
* @author Hollis 17/9/27.
*/ public class FieldOverriding {
public static void main(String[] args) {
Sub c1 = new Sub();
System.out.println(http://" c1.s : " + c1.s);
System.out.println(" c1.say : " + c1.say());
Super c2 = new Sub();
System.out.println(" c2.s : " + c2.s);
System.out.println(" c2.say : " + c2.say());
}
}
class Super {
String s = "Super";
String say(){
return "hello Super";
}
}
class Sub extends Super {
String s = "Sub";
String say(){
return "hello Sub";
}
}
输出结果:
c1.s : Sub
c1.say : hello Sub
c2.s : Super
c2.say : hello Sub
和你想的一样吗,如http://果一样的话,那就不用继续往下看了。因为这个本来就不难,知道了就行。
Java中的重写
在深入理解Java中的重写和重载中我们介绍过:
在Java的子类与父类中有两个名称、参数列表都相同的方法的情况。由于他们具有相同的方法签名,所以子类中的新方法将覆盖父类中原有的方法。
正式因为Java在继承中有方法的重写,所以,这也体现了Java的动态多态性。
成员变量在Java中能够被重写么?
上面的Java的重写介绍中明确的说了,重写,指的是方法。并没有提到成员变量。通过上面的例子,其实我们也可以发现,成员变量并没有被重写。
所以,Java中,成员变量并不会被重写。这里就有另外一个词:隐藏。
Java中成员变量的隐藏
Java文档中对隐藏域的定义:
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 simhttp://ple name. Instead, the field must be accessed through super. Generally speaking, we don't recommend hiding fields as it makes code difficult to read.
翻译成中文:
在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读http://。
其实,简单来说,就是子类不会去重写覆盖父类的成员变量,所以成员变量的访问不能像方法一样使用多态去访问。
如何访问被隐藏的成员变量
其实,通过前面的例子,和刚刚关于成员变量的介绍,其实你已经知道了如何访问被隐藏的成员变量。 就是使用父类的引用来访问成员变量,如Super c2 = new Sub(); System.out.println(" c2.s : " + c2.s);。或者使用System.out.println(((Super)c1).s);。
总结
以上所述是给大家介绍的Java中方法的重写与成员变量的隐藏,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~