博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么成员属性不会被重写
阅读量:6160 次
发布时间:2019-06-21

本文共 828 字,大约阅读时间需要 2 分钟。

本篇文章将展示一个基本的面向对象概念-属性隐藏。

Java中的成员属性能被重写吗?

让我们先看以下代码示例,创建了两个Sub对象,并将其引用分别赋给SUb类和其父类Super;

package simplejava;class Super {    String s = "Super";}class Sub extends Super {    String s = "Sub";}public class Q3 {    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

为什么创建了两个Sub对象,第二个却输出了”Super“;

 隐藏属性而不是重写它们

先看一下属性隐藏的定义:

对于一个类,当其属性与其父类的某个属性有相同的名字(即使类型不同),其父类的属性会被隐藏起来;对于子类来说,父类的属性是不能被子类对象引用访问到的,而需要通过其父类对象的引用访问;通常来说,我们不建议隐藏属性,因为这会使代码不易阅读;

 从以上定义可以看出,成员属性不能像方法那样被重写,当子类定义了一个和其父类相同名字的成员属性,子类仅仅是声明了一个新的属性,而起父类的属性被隐藏起来,这不是重写,所以不能以多态的形式访问。

访问隐藏属性的方法

1、使用父类对象引用类型访问,像前面demo提到的那样;

2、将子类对象引用类型强制转换成父类对象引用类型:

System.out.println(((Super)c1).s);

 译文链接:

转载于:https://www.cnblogs.com/chenpi/p/5485669.html

你可能感兴趣的文章
算法笔记之高速排序
查看>>
使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
查看>>
一个网络传输框架——zeroMQ 调研笔记
查看>>
HDU ACM 1046 Gridland 找规律
查看>>
[C/C++标准库]_[0基础]_[优先队列priority_queue的使用]
查看>>
一个关于 UIPickerView 的 bug
查看>>
喜欢的名言警句
查看>>
使用 ServiceStack 构建跨平台 Web 服务
查看>>
GraphX中Pregel单源点最短路径(转)
查看>>
zendstudio的安装与配置
查看>>
(转)Java ConcurrentModificationException异常原因和解决方法
查看>>
Cloudera Hadoop 4 实战课程(Hadoop 2.0、集群界面化管理、电商在线查询+日志离线分析)...
查看>>
数据同步
查看>>
Android应用更新自动检测下载
查看>>
android Broadcast广播消息代码实现
查看>>
全息投影技术及其实现(附素材下载)
查看>>
JVM——类的加载过程
查看>>
李洪强-HEAD 和nil和NULL
查看>>
逻辑卷管理LVM (Logical Volume Manager)
查看>>
tomcat使用线程池配置高并发连接
查看>>