Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >为什么Java中类的成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

为什么Java中类的成员变量不能被重写?成员变量在Java中能够被重写么?不会重写成员变量,而是隐藏成员变量访问隐藏域的方法

作者头像
desperate633
发布于 2018-08-22 07:21:57
发布于 2018-08-22 07:21:57
3.8K01
代码可运行
举报
文章被收录于专栏:desperate633desperate633
运行总次数:1
代码可运行

这篇文章讨论了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. 我们看下面这个例子,我们创建了两个子对象,一个使用的是子对象的引用,一个使用的是父对象的引用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.03.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
学完这篇 Nest.js 实战,还没入门的来锤我!(长文预警)
最近接到一个小需求,需要自己全干(前端+后端),看到群里大家对Nest.js热情都很高,自己也心痒痒,所以就走上了Nest.js的不归路~
五月君
2021/11/30
14.8K2
学完这篇 Nest.js 实战,还没入门的来锤我!(长文预警)
Nest.js 快速入门:实现对 Mysql 单表的 CRUD
Nest.js 是一个 Node.js 的后端开发框架,它实现了 MVC 模式,也支持了 IOC(自动注入依赖),比 Express 这类处理请求响应的库高了一个层次。而且也很容易集成 GraphQL、WebSocket 等功能,适合用来做大规模企业级开发。
神说要有光zxg
2021/12/26
4.2K0
Nest.js 快速入门:实现对 Mysql 单表的 CRUD
2024 版:Node.js+Express+Koa2+Nest.js 开发服务端(高の青)
在现代的 web 开发中,Node.js 是一种非常流行的服务器端 JavaScript 环境。我们来编写一个大致的框架和一些关键代码片段,以帮助你了解如何使用 Node.js、Express、Koa2 和 Nest.js 开发服务端应用。
百课优用户
2024/07/29
3690
Nest.js 框架实战之认识与搭建(一)
这是关于如何搭建后端服务的实战类文章,其实在写这类文章之前,也了解了其它的 Node 服务端框架,比如 egg.js、koa.js 等框架,经过比对我更倾向于使用 Nest 框架,因此有了该系列文章,借此总结和梳理自己在项目搭建和开发的过程。
玖柒的小窝
2021/11/08
1.6K0
【Nest教程】连接MySQL数据库
forRoot()方法接受与来自TypeORM包的createConnection()相同的配置对象。另外,我们可以创建ormconfig.json,这种方式创建的json文件,在测试过程中,运行报错,具体原因没有找到。
青年码农
2021/01/18
4.2K0
【Nest教程】连接MySQL数据库
使用NestJs、GraphQL、TypeORM搭建后端服务
本文介绍今年上半年使用的的一些技术,做一些个人的学习记录,温故而知新。主要包含了Nestjs、TypeGraphQL、TypeORM相关的知识。本文示例代码以提交到github,可以在这里查看。
路过的那只狗
2020/11/14
6.8K0
NestJS学习总结篇
完整版本,点击此处查看 http://blog.poetries.top/2022/05/25/nest-summary
前端进阶之旅
2022/05/27
2.4K0
10分钟上手nest.js+mongoDB
项目中我们会用到 Mongoose 来操作我们的数据库,Nest 官方为我们提供了一个 Mongoose 的封装,我们需要安装 mongoose 和 @nestjs/mongoose:
淼学派对
2024/04/10
4240
做了一个Nest.js上手项目,很丑,但适合练手和收藏
最近爱了上 Nest.js 这个框架,边学边做了一个 nest-todo 这个项目。
秋风的笔记
2021/09/22
4.8K1
做了一个Nest.js上手项目,很丑,但适合练手和收藏
GraphQL 实践与服务搭建
大概率你听说过 GraphQL,知道它是一种与 Rest API 架构属于 API 接口的查询语言。但大概率你也与我一样没有尝试过 GraphQL。
愧怍
2022/12/27
5.4K0
GraphQL 实践与服务搭建
Nest.js 从零到壹系列(一):项目创建&路由设置&模块
本系列将以前端的视角进行书写,分享自己的踩坑经历。教程主要面向前端或者毫无后端经验,但是又想尝试 Node.js 的读者,当然,也欢迎后端大佬斧正。
一只图雀
2020/04/07
5.4K0
从零开始的 Nest.js
Nest.js 久有耳闻了,但是一直没有时间去真正学习他,一直鸽子到了现在。我想借着学习 nest 的先进思想,来重构我的博客后端。
Innei
2021/12/28
1.7K0
BFF与Nestjs实战
主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, greenwillow, v-green, vue-pro, healer-readable, mk-cute, jzman, geek-black, awesome-green, qklhk-chocolate
乐圣
2022/11/19
2.8K0
BFF与Nestjs实战
Nest.js 从零到壹系列(七):讨厌写文档,Swagger UI 了解一下?
上一篇介绍了如何使用寥寥几行代码就实现 RBAC 0,解决了权限管理的痛点,这篇将解决另一个痛点:写文档。
一只图雀
2020/04/17
4.8K0
Nest.js 从零到壹系列(七):讨厌写文档,Swagger UI 了解一下?
NestJS、TypeORM 和 PostgreSQL 项目开发和数据库迁移完整示例(译)
当 Node.js Server 项目越来越大时,将数据和数据库整理规范是很难的,所以从一开始就有一个好的开发和项目设置,对你的开发项目的成功至关重要。在这篇文章中,向你展示是如何设置大部分 Nest.js 项目的,我们将在一个简单的 Node.js API 上工作,并使用 PostgreSQL 数据库作为数据存储,并围绕它设置一些工具,使开发更容易上手。
五月君
2021/11/30
5.6K0
NestJS、TypeORM 和 PostgreSQL 项目开发和数据库迁移完整示例(译)
Nest.js 实战系列第二篇-实现注册、扫码登陆、jwt认证等
大家好我是考拉🐨,这是 Nest.js 实战系列第二篇,我要用最真实的场景让你学会使用 Node 主流框架。 上一篇中 【Nest.js入门之基本项目搭建】 带大家入门了Nest.js, 接下来在之前的代码上继续进行开发, 主要两个任务:实现用户的注册与登录。 在实现登录注册之前,需要先整理一下需求, 我们希望用户有两种方式可以登录进入网站来写文章, 一种是账号密码登录,另一种是微信扫码登录。文章内容大纲 接着上章内容开始... 前面我们创建文件都是一个个创建的, 其实还有一个快速创建Contoller
coder_koala
2021/12/13
10.2K0
Nest.js 实战系列第二篇-实现注册、扫码登陆、jwt认证等
Nest系列教程之控制器
为了创建一个基本的控制器,我们必须将元数据附加到类中。Nest 知道如何映射我们的控制器到相应的路由。
阿宝哥
2019/11/06
1.8K0
Nest系列教程之控制器
Nest.js 从零到壹系列(三):使用 JWT 实现单点登录
上一篇介绍了如何使用 Sequelize 连接 MySQL,接下来,在原来代码的基础上进行扩展,实现用户的注册和登录功能。
一只图雀
2020/04/07
5.6K0
Nest.js笔记(持续更新...)
ctrl+shift+p => package install => typescript
杨肆月
2019/08/15
1.6K0
学习NestJS的第一个接口(一)
以前开发小程序api使用过Express.js、Koa.js等框架,最近想用NestJS重构自己的几个小程序后台,所以从零开始学习NestJS框架。
一起重学前端
2024/09/11
3640
推荐阅读
相关推荐
学完这篇 Nest.js 实战,还没入门的来锤我!(长文预警)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验