Java中为什么字段不能被重写
来源:互联网 发布:淘宝千里眼在线人数 编辑:程序博客网 时间:2024/05/22 00:09
(转载)http://www.xinxingzhao.com/blog/2015/09/05/why-field-cantt-be-overridden/
原文地址
在Java中字段能被重写吗?
先让我们看一下下面这个例子,新建两个Sub对象,一个指向Sub类型的引用,一个指向 Super类型的引用。
输出的结果如下:
我们创建了两个Sub对象,但是为什么第二个对象打印出来的结果是"Super"呢?
隐藏字段代替了重写
在java官方提供的tutorial有一段关于隐藏字段的明确定义:
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) 采用父类的引用类型,这样隐藏的字段就能被访问了,像上面所给出的例子一样。 2) 将子类强制类型转化为父类类型,也能访问到隐藏的字段。
关于tutorial中的说明原文地址:
Hiding Fields
//--------------------------------------------------------------------------------------------------------------------------------------------------------这个主要涉及到java里面一个字段隐藏的概念,父类和子类定义了一个同名的字段,不会报错。但对于同一个对象,用父类的引用去取值,会取到父类的字段的值,用子类的引用去取值则取到子类字段的值。在实际的开发中,要尽量避免子类和父类使用相同的字段名,否则很容易引入一些不容易发现的bug。
- Java中为什么字段不能被重写
- Java中为什么字段不能被重写
- 为什么Java中类的成员变量不能被重写?
- Java中为什么静态方法不能被重写?为什么静态方法不能隐藏实例方法?
- 为什么Field不能被重写?
- java静态方法的重写,为什么不能?
- java为什么不能重写静态方法
- java中静态(static)的方法为什么不能重写(override)
- java中静态(static)的方法为什么不能重写(override)
- Java中为什么要重写ToString方法
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- JAVA中重写equals()方法为什么要重写hashcode()方法?
- CentOS安装使用innobackupex增量备份指定数据库
- 将字符串加密后写入文件,然后读取该文件,并解密。
- Hadoop_Hdfs ACL 权限控制详解
- hibernate单向多对多映射(many-to-many)XML与注解版
- 什么才是正确的javascript数组检测方式
- Java中为什么字段不能被重写
- 前端框架Aurelia —— 路由Router
- Java中的Timer和TimerTask在Android中的用法
- 水题-nefuoj-1171
- DB2的限制/最大值汇总
- 海岛争霸 第七届河南省程序设计大赛
- MySQL 数据库同步配置
- Linux_Hi3518 SDK 安装以及编译出错分析
- js货币比较