博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
「每日分享」Java中方法的重写与成员变量的隐藏
阅读量:6826 次
发布时间:2019-06-26

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

点击上方"java全栈技术"关注,每天学习一个java知识点

原创: 爱学习的

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

在讨论这个问题之前,我们看一段特别特别简单的代码,请问一下方法的数据结果是什么?

「每日分享」Java中方法的重写与成员变量的隐藏

输出结果:

c1.s : Sub  c1.say : hello Sub  c2.s : Super  c2.say : hello Sub

和你想的一样吗,如果一样的话,那就不用继续往下看了。因为这个本来就不难,知道了就行。

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

翻译成中文:

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

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

如何访问被隐藏的成员变量

其实,通过前面的例子,和刚刚关于成员变量的介绍,其实你已经知道了如何访问被隐藏的成员变量。 就是使用父类的引用来访问成员变量,如Super c2 = new Sub(); System.out.println(" c2.s : " + c2.s);。或者使用System.out.println(((Super)c1).s);。

转载地址:http://jiykl.baihongyu.com/

你可能感兴趣的文章
MediaCodec 高效解码得到标准 YUV420P 格式帧
查看>>
还欠自己一整套LeetCode 算法题
查看>>
HTML5的特性与发展趋势
查看>>
[NGX]Angular组件/指令生命周期简介
查看>>
剑指offer刷题指南
查看>>
详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)
查看>>
《2018双11医美城市消费榜单》:医美将在二三线城市大爆发
查看>>
正在经历寒冬的无印良品,春天在哪里?
查看>>
Scrapy框架的使用之Scrapyrt的使用
查看>>
OkHttpClient 源码分析 2(基于3.9.0的源码)
查看>>
如何写一个无配置格式统一的日志
查看>>
tsconfig.json整理记录
查看>>
adb通信协议分析以及实现(四):adb shell 命令分析
查看>>
日常工作中,个人总结的 - Git - 常用操作方法 (一)
查看>>
面试中被面试官问到的问题答案(一)
查看>>
使用属性Props完成一张卡片
查看>>
49. Group Anagrams
查看>>
TypeScript实现数据结构(一)栈,队列,链表
查看>>
IOS评论框不贴底(ios12新bug)
查看>>
26. Remove Duplicates from Sorted Array
查看>>