java 子类 同名参数_Java -- 父类和子类拥有同名变量
Java -- 父类和子类拥有同名变量
Java -- 父类和子类拥有同名变量
Java – 父类和子类拥有同名变量
请仔细观察系列两段程序的不同之处:一个Son类重写print方法,另一个则没有重写。
分析该问题必须从字节码的角度入手,否则根本不可能看清事情的本质。
成员变量(非静态的)的赋值过程:
默认初始化
显示初始化 / 代码块中初始化
构造器中初始化
有了对象之后。可以“对象.属性”或“对象.方法”的方式队成员变量进行赋值。
最重要的是要搞清楚父类和子类的同名变量是否占用一块内存!!!
方法存在重载,但属性不存在重载。
package test0;
/**
* @author wsh2096
* @create 2020-10-28 8:57
*/
public class SonTest {
public static void main(String[] args) {
Father f = new Son();
System.out.println(f.x);
}
}
class Father {
int x = 10;
public Father() {
this.print();
x = 20;
}
public void print() {
System.out.println("Father.x = " + x);
}
}
class Son extends Father {
int x = 30;
public Son() {
this.print();
x = 40;
}
@Override
public void print() {
System.out.println("Son.x = " + x);
}
}
Father类的字节码:
init方法字节码:
print方法字节码
Son类的字节码:
init方法字节码:
print方法字节码
分析:
第一个输出0的原因是:在调用print方法的时候,子类Son重载该方法,所以调用子类方法进行输出,此时子类的x还没有显示初始化,所以输出的是子类x默认初始化值0。
第二个输出30的原因是:在Son类的构造器进行输出,此时Son类的x已经进行完显示初始化,将Son的x值赋值为30.
第三个输出20的原因是:此时变量f实际上指向的是Son类的实例,但是外观上是Father类,由于方法存在重载,会进行动态链接进行查找子类的具体实现方法!但是,属性十不存在重载,也就不存在动态链接,所以此时输出f的x值,是去查找Father类实例的属性x的值。(此时父类的构造器已经执行完毕,所以此时的值为20.)
对父类的print方法不进行重载!
package test0;
/**
* @author wsh2096
* @create 2020-10-28 8:57
*/
public class SonTest {
public static void main(String[] args) {
Father f = new Son();
System.out.println(f.x);
}
}
class Father {
int x = 10;
public Father() {
this.print();
x = 20;
}
public void print() {
System.out.println("Father.x = " + x);
}
}
class Son extends Father {
int x = 30;
public Son() {
this.print();
x = 40;
}
// @Override
// public void print() {
// System.out.println("Son.x = " + x);
// }
}
这个没有重载print方法的版本就不放字节码了,与重载的版本相比,只不过是少了东西,其他部分都是一样的。
最后一个输出不需要解释!
第一个输出10,是因为子类并没有重载print方法,所以调用Father的print方法,输出的就是父类的x值,此时已经完成显示初始化,为10.
第二个输出20,属性不能重载,输出Father的x值,此时完成Father构造器初始化,将值赋为20.
Java -- 父类和子类拥有同名变量相关教程
java 登录数据前端加密+后台验证RSA
java 登录数据前端加密+后台验证RSA 前端加密使用RSA+MD5+自写算法 使用到了 md5.js+jsencrypt.min.js+1.js+RSAUtils.java(自写算法) 下载链接:https://gitee.com/gy297879328/learning_summary/tree/master/jiami 使用:RSAUtils.java生成一堆密钥对 ( 公
【Java】网络编程
【Java】网络编程 网络编程 网络通信要素 通信要素1:IP和端口号 IP InetAddress类 实例化 常用方法:getHostName() 常用方法:getHostAddress() 端口号 通信要素2:网络协议 TCP网络编程 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上 例子2:
10--JavaScript--2.1 **内置对象
10--JavaScript--2.1 **内置对象 内置对象 JavaScript 中的对象分为3种: 自定义对象 、内置对象、 浏览器对象 前面两种对象是JS 基础 内容,属于 ECMAScript; 第三个浏览器对象属于 JS 独有的 JavaScript 提供了多个内置对象: Math、 Date 、Array、String
Java 8 异步 API、循环、日期,用好提高生产力!
Java 8 异步 API、循环、日期,用好提高生产力! 点击上方的终端研发部,右上角选择“ 设为星标 ” 来源:cnblogs.com/funnyzpc/p/10801470.html 异步API 循环ForEach 新的时间类( LocalDate、LocalDateTime ) 异步API 对于多任务耗时的业务场景,一般我们会
【刷题1】LeetCode 62. 不同路径 java题解
【刷题1】LeetCode 62. 不同路径 java题解 1.题目 2.方法一:动态规划 一个m*n的网格 转移方程: 由于机器人只能向下或向右,所以此时的路径和=向上的路径和+向左的路径和 dp[i][j]=dp[i-1]+dp[j-1]。 初始条件: 由于第一行和第一列都只有一种路, dp[0][■]
穿越Java - SpringCloud篇 第二章 服务注册与发现 - NACOS | 第2
穿越Java - SpringCloud篇 第二章 服务注册与发现 - NACOS | 第2节NACOS+RestTemplate+DiscoveryClient实现服务的注册与发现 NACOS+RestTemplate+DiscoveryClient实现服务的注册与发现 开发环境 更多干货 需求 分析 使用 User-service 目录结构 pom.xml 依赖
数据结构之二分法以及八大排序算法的理解与代码实现(Java)
数据结构之二分法以及八大排序算法的理解与代码实现(Java) 顾明思意,二分法就是将我们的数组一分为二,然后拿我们要查找的数去和中间的那个元素比较,如果刚好等于中间那个元素,那么就返回中间位置的下标。如果比中间的元素小,那么再使用相同的方式从中
Java SE从入门到放弃(十一)
Java SE从入门到放弃(十一) Java SE从入门到放弃(十一)之Eclipse快捷键总结以及继承和重写 Eclipse中的快捷键: * 1.补全代码的声明:alt + / * 2.快速修复: ctrl + 1 * 3.批量导包:ctrl + shift + o * 4.使用单行注释:ctrl + / * 5.使用多行注释: ctrl
java 子类 同名参数_Java -- 父类和子类拥有同名变量相关推荐
- java子类和父类有相同成员_Java -- 父类和子类拥有同名的成员变量的情况
Java – 父类和子类拥有同名的成员变量取值情况 参考文章 结论: 当子类的成员变量与父类同名时,若对该成员变量进行操作的方法继承于父类,则改变和获取的是父类的成员变量.若对该成员变量进行操作的方法 ...
- java 子类的同名方法_java 父类子类有同名方法时如何调用的实现
父类引用默认调用子类重写的方法 如果父类的引用p指向了子类的实例,则通过这个引用p访问同名方法时,调用的是子类重写的方法. 父类引用p可以指向不同的子类,调用不同子类重写的不同的同名方法,进而达到类间 ...
- java中super用来定义父类,定义子类必须使用的关键字是 在java中子类若要继承父类,需要使用的关键字是什么...
java定义接口时需要使用的关键字是 定义接口复使用的关键字是"interface",中文意思"接口.解释:通常接口都是制为了定义百某些规范,而在接口中只定义了方法,而没 ...
- Java中的继承:父类和子类的关系
一.父类引用指向子类对象时 1.若子类覆盖了某方法,则父类引用调用子类重新定义的新方法 2.若子类未覆盖某方法,则父类引用调用父类本身的旧方法 3.若子类覆盖了某属性,但父类引用仍调用父类本身的旧属性 ...
- java 什么是参数_java中参数是什么?
java中参数是什么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! java中参数是什么? 参数分为实参和形参.方法名 ...
- java 接口 this参数_Java BiFunction 接口实例
原标题:Java BiFunction 接口实例 www.baeldung.com/java-bifunction-interface 1. 简介 Java8 引入了函数式编程,可以把函数作为参数传入 ...
- java 命令行参数 _java命令行参数
原标题:java命令行参数 命令行参数就是main方法里面的参数String[] args他就是一个数组,args只是数据类型的一个名称,就是一个数组的变量,名称无所谓,类型没变就行了.这个就是程序的 ...
- java方法可选参数_Java可选参数
java方法可选参数 在Java类中设计方法时,某些参数对于其执行而言可能是可选的. 无论是在DTO,胖模型域对象还是简单的无状态服务类中,可选方法参数都是常见的. 从本文中, 您将学习如何在Java ...
- java this作为参数_Java this关键字
在 Java 中,this 关键字指的是当前对象的引用,它有 5 种用法,下面分别给大家介绍一下. 1.消除语法歧义(最常用) 这种情况一般出现在有参构造器中,当构造器的参数与类的属性(或成员变量)名 ...
最新文章
- arm服务器配置信息,ARM板 web服务器交叉编译及配置
- php丢弃,在IIS 7.5中,PHP吓坏了(连接丢失,连接被丢弃)
- node 生成随机头像_唯一ID生成算法剖析
- Python 使用@property对属性进行数据规范性校验
- dll可以在linux下使用吗_无需虚拟技术,6步直接在Windows下使用Linux
- Java中byte[]与十六进制之间的转化
- html显示高亮c++
- php基础教程 第十一步 面向对象
- C语言 extern - C语言零基础入门教程
- 最小生成树基础 (Kruskal)
- 涂威威:第四范式经验与思考分享
- windows idea Tomcat端口被占用
- 三农数据(1996-2020)九:产值:谷物及其他作物、蔬菜园艺、水果、坚果、饮料
- 电阻器颜色代码在线计算机,色环电阻计算器
- 起风了数字简谱用计算机,起风了钢琴简谱-数字双手-买辣椒也用券
- android SDK introduce
- Word2016写论文之——常用操作总结
- 7-1 最长公共子序列 (20 分)
- python车牌定位
- “知识共享”扎根中国,前景无量
热门文章
- 随机森林分类算法python代码_随机森林的原理及Python代码实现
- x86汇编指令集大全注释(二)
- Android8.1 swap空间不够编译失败:ckati failed with: signal: interrupt
- Gstreamer离线版官方文档(十五)
- 深入剖析Android音频之AudioPolicyService
- ubuntu安装最新版apktool(最新版)反编译工具
- SpringBoot之maven包管理
- Visual Assist X安装
- 订阅号获取openid_小程序订阅消息
- git branch看不到分支_最好的Git分支管理教程