java 覆盖和隐藏_Java方法的覆盖与隐藏的区别分析

本篇文章介绍了,关于Java方法的覆盖与隐藏的区别分析。需要的朋友参考下

关于隐藏和覆盖的区别,要提到RTTI(run-time type identification)(运行期类型检查),也就是运行期的多态,当一个父类引用指向子类对象的时候,请看下面我编写的一段代码:

public class RunTime {

public static void main(String[] args) {

Animal a = new Cat();

System.out.println(a.A);

System.out.println(a.b);

a.voice();

a.method();

}

}

class Dog extends Animal {

public int b = 3;

public static int A = 3;

public static void method(){

System.out.println("狗");

}

public void voice() {

System.out.println("狗叫");

}

}

class Cat extends Animal {

public int b = 4;

public static int A = 4;

public static void method(){

System.out.println("猫");

}

public void voice() {

System.out.println("猫叫");

}

}

class Animal {

public int b = 0;

public static int A = 0;

public static void method(){

System.out.println("动物");

}

public void voice() {

System.out.println("动物叫");

}

}

输出结果是:

0

0

猫叫

动物

您可以看到,当父类Animal的引用a指向子类Dog时,RTTI在运行期会自动确定该引用的真是类型,当子类  覆盖  了父类的方法时,则直接调用子类的方法,打印出“猫叫”;然而非静态的方法在子类中重写的话就是被覆盖,而静态的方法被子类重写的话就是隐藏,另外,静态变量和成员变量也是被隐藏,而RTTI是只针对覆盖,不针对影藏,所以,静态变量 A 和 非静态变量 b 以及静态方法method() 均不通过RTTI,是哪个类的引用就调用谁的静态方法,成员变量,而这里是父类Animal的引用,所以直接调用父类Animal中的方法以及成员变量。所以静态方法 method(),  静态变量 A 和成员变量 b 打印结果全是父类中的。只用被覆盖的非静态方法voice()才打印子类的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20175204 张湲祯 2018-2019-2《Java程序设计》 第一周学习总结

20175204 张湲祯 2018-2019-2《Java程序设计》第一周学习总结 教材学习内容总结 -第一章Java入门要点: -Java的地位:具有面向对象,与平台无关,安全稳定和多线程等优良特性,是软件设计中优秀的编程语言。 -Java的特点&a…

使用线程,防止当前程序被阻塞

在编写Windows Form程序时有时需要编写一个处理大事件的函数,这导致了程序的运行时间变得很长,这时问题就出现了,当程序没有处理完毕之前当前窗体被锁死了,而且用户如果此时点击窗体的其他部分,便会出现没有响应的标识…

[vue] 分别说说vue能监听到数组或对象变化的场景,还有哪些场景是监听不到的?无法监听时有什么解决方案?

[vue] 分别说说vue能监听到数组或对象变化的场景,还有哪些场景是监听不到的?无法监听时有什么解决方案? 无法监听时的方案: 数组:改变数组的值:this.$set() 改变数组长度:arr.splice() 对象&am…

java 文本排序_如何使用Java按最高编号对文本文件进行排序

使用像TreeMap这样的有序集合,它按照键的自然顺序保存其条目(键值映射)。因为,您希望对高分进行排序,将分数作为键和玩家名称作为其值。// instantiate your sorted collectionMap highestScores new TreeMap();// setup a file readerBuffe…

探索未知种族之osg类生物---呼吸分解之更新循环一

上节总结 前几天我们大体上介绍完成了osg的事件循环的介绍,总结一下osg的时间循环主要就是得到平台(windows)的所有消息,并遍历所有的node的eventCallback,并对他们进行处理。接下来我们就要进入osg的另一个维持生命的循环---更新循环。 更新…

【EXLIBRIS】纸版书目整理 -- 大书架 上 【292 种】【327册】

为了避免往年光说不练的现象,提前开始整理,并post在这里,接受监督,:)一、大书架 上 【292 种】【327册】书名存放位置出版社史记(全本)大书架上中州古籍出版社儒林外史大书架上岳麓书…

CSS3属性——(一)

在CSS中追加了三个属性选择器:[att*val]、[att^val]、[att$val] [att*val]属性选择器 如果元素用att表示的属性的值中包含用val指定的字符,那么该元素使用这个样式。 [att^val]属性选择器 如果用att表示的属性值的开头字符为用val指定的字符的话&#xf…

[vue] v-if和v-for的优先级是什么?如果这两个同时出现时,那应该怎么优化才能得到更好的性能?

[vue] v-if和v-for的优先级是什么?如果这两个同时出现时,那应该怎么优化才能得到更好的性能? v-for 的优先级更高 避免出现这种情况,如果实在需要,则在外嵌套template,在这一层进行v-if判断,然…

JSP实战型程序连载:通用数据库连接JavaBean

package online;import java.sql.*;public class DBConn {private static String rootpath "web发布路径";private String sample "sample";private Connection con null;private Statement stmt null;ResultSet rs null;/**************************…

java变换变量赋值_Java变量的类型转换

在程序中,当把一种数据类型的值赋给另一种数据类型的变量时,需要进行数据类型转换。根据转换方式的不同,数据类型转换可分为两种:自动类型转换和强制类型转换。自动类型转换自动类型转换也叫隐式类型转换,指的是两种数据类型在转换…

字符串的拼接

再字符串的拼接的时候对一些字符需要进行转译&#xff0c;要不然会出现问题 var btn <button class"jui-form-button" type"button" οnclick"save_msg(\ json[i].id \,\ json[i].template \,document.getElementById(\disab i \).value,do…

[vue] vue在组件中引入插件的方法有哪些?

[vue] vue在组件中引入插件的方法有哪些&#xff1f; 插件通常用来为 Vue 添加全局功能。插件的功能范围没有严格的限制——一般有下面几种&#xff1a;添加全局方法或者属性。如: vue-custom-element添加全局资源&#xff1a;指令/过滤器/过渡等。如 vue-touch通过全局混入来…

]英文资料大全

语法 http://www.dailygrammar.com/ adventuretv,提供视频资料&#xff0c;内容多是各地的风土人情&#xff0c;很不错。 http://www.adventuretv.com/ 纽约时报&#xff0c;网上看新闻的好地方 http://www.nytimes.com/ 英文MP3下载的好地方 http://www.mp3raid.com/archiv…

java linearlayout_LinearLayout属性用法和源码分析

对于一个View(ViewGroup)来说实现无非于三个流程&#xff0c;onMeasure(测量)&#xff0c;onLayout(定位)&#xff0c;onDraw(绘制)&#xff0c;接下来就对这三个部分一一分析但是首先还是对LinearLayout变量进行介绍1.LinearLayout变量其实LinearLayout变量与上篇属性篇中关联…

[vue] vue实例挂载的过程是什么?

[vue] vue实例挂载的过程是什么&#xff1f; render, 没有则去编译编译vdom对实例进行watch个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

如何进行.NET高效开发

sugar 2006-03-12 13:53 转载于:https://www.cnblogs.com/SCOTT-SUN/archive/2006/06/02/416077.html

Linux 系统更改界面显示详解

1,修改配置文件 # inittab is only used by upstart for the default runlevel. # # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM. # # System initialization is started by /etc/init/rcS.conf # # Individual runlevels are started by /etc/init/…

jni c java互相调用_通过JNI实现Java和C++的相互调用

评论# re: 通过JNI实现Java和C的相互调用2008-07-29 14:14Always BaNg.不错&#xff0c;把字符转换也一并讲了吧&#xff0c;比如UTF-8的处理&#xff0c;USC-2与MBCS转换等。 回复 更多评论# re: 通过JNI实现Java和C的相互调用[未登录]2008-07-29 14:17role0523你是指Java和…

Apache——Introduction

Apache——IntroductionIntroduction Apache是有着10年悠久历史的项目了&#xff0c;据有关方面的调查&#xff0c;有超过70&#xff05;的站点都使用Apache作为Web Server&#xff0c;可见其应用的广泛了。Apache适用于现代的各种操作系统&#xff0c;包括Unix、Linux和Window…

洛谷 P3244 / loj 2115 [HNOI2015] 落忆枫音 题解【拓扑排序】【组合】【逆元】

组合计数的一道好题。什么非主流题目 题目背景 &#xff08;背景冗长请到题目页面查看&#xff09; 题目描述 不妨假设枫叶上有 \(n​\) 个穴位&#xff0c;穴位的编号为 \(1\sim n​\)。有若干条有向的脉络连接着这些穴位。穴位和脉络组成一个有向无环图——称之为脉络图&…