为什么Java中类的成员变量不能被重写?

这篇文章讨论了Java面向对象概念中一个基本的概念--Field Hiding(成员变量隐藏)

成员变量在Java中能够被重写么?

Let’s first take a look at the following example which creates two Sub objects. One is
assigned to a Sub reference, the other is assigned to a Super reference.
我们看下面这个例子,我们创建了两个子对象,一个使用的是子对象的引用,一个使用的是父对象的引用。


public class FieldOverriding {

    public static void main(String[] args) {
        Sub c1 = new Sub();
        Super c2 = new Sub();
        System.out.println(c1.s);
        System.out.println(c2.s);

    }

}

class Super {
    String s = "Super";
}

class Sub extends Super {
    String s = "Sub";
}

程序的输出结果是:

Paste_Image.png

按照我们已有的多态的概念,第二个应该是输出sub才对,但却输出了super。这是为什么呢?

不会重写成员变量,而是隐藏成员变量

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 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.

意思就是:

在一个类中,子类中的成员变量如果和父类中的成员变量同名,那么即使他们类型不一样,只要名字一样。父类中的成员变量都会被隐藏。在子类中,父类的成员变量不能被简单的用引用来访问。而是,必须从父类的引用获得父类被隐藏的成员变量,一般来说,我们不推荐隐藏成员变量,因为这样会使代码变得难以阅读。

其实,简单来说,就是子类不会去重写覆盖父类的成员变量,所以成员变量的访问不能像方法一样使用多态去访问。

访问隐藏域的方法

  • 就是使用父类的引用类型,那么就可以访问到隐藏域,就像我们例子中的代码

  • 就是使用类型转换System.out.println(((Super)c1).s);

翻译自http://www.programcreek.com/simple-java/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 6,330评论 0 3
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,883评论 0 9
  • 我们常常会听说 Objective-C 是一门动态语言,那么这个「动态」表现在哪呢?我想最主要的表现就是 Obje...
    Ethan_Struggle阅读 6,614评论 0 7
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 33,237评论 18 399
  • 夜凉如水 枕着你的名字却难寐 无你相随 月色 全无味 聆听彼此的心跳 空气弥漫着甜甜的味道 不再烦躁 相伴即是最好...
    妮妮小阿狸阅读 1,544评论 6 4

友情链接更多精彩内容