覆盖与隐藏的区别 (一个列子)
例子:
class Student1{
int math = 70;
static int computer = 80;
int english = 65;
public Student1(){
study();
exercise();
}
public void study(){
System.out.println("Student.study:每位学生都在认真学习");
}
public static void exercise(){
System.out.println("Student.exercise:所有学生都在做练习");
}
}
class Graduate1 extends Student1{
int math = 93;
int computer = 99;
static int english = 85;
public Graduate1(){
study();
exercise();
}
public void study(){
System.out.println("Graduate.study:每位研究生都在认真学习");
}
public static void exercise(){
System.out.println("Graduate.exercise:所有研究生都在做练习");
}
public static void main() {
Student1 s = new Graduate1();
System.out.println();
Graduate1 g = new Graduate1();
System.out.print(s.math);
System.out.print("\t");
System.out.print(s.computer);
System.out.print("\t");
System.out.println(s.english);
System.out.print(g.math);
System.out.print("\t");
System.out.print(g.computer);
System.out.print("\t");
System.out.println(g.english);
}
}
1. 隐藏与覆盖类方法
在讲清这个问题之前,先明白什么是隐藏?什么是覆盖?
所谓隐藏,是指运行时系统调用当前对象引用的编译时类型中定义的方法;对于覆盖,则指运行时系统调用当前对象引用运行时类型中定义的方法。
所以在执行Student1 s = new Graduate1();和Graduate1 g = new Graduate1();时,(1)先进行Student1类的构造,这里包括两个方法study()和exercise(),由于study()方法被覆盖,所以先执行Graduate1里study(),再执行Student1里的exercise();(2)再进行Graduate1类的构造,同样包括两个方法study()和exercise(),所以执行顺序为先Graduate1里的study()方法,再Graduate1里的exercise()方法。
2. 隐藏与覆盖成员变量
如果子类中的变量和父类中的变量具有相同的名字,那么子类中的变量就会隐藏父类中的变量,不管他们的类型是什么,也不管他们是类变量还是实例变量。
所以在执行诸如System.out.print(s.math);之类的s实例的程序时,显示为Student1类的成员变量,而执行诸如System.out.print(g.math);之类的g实例的程序时,显示为Graduate1类的成员变量。
答案:
Graduate.study:每位研究生都在认真学习
Student.exercise:所有学生都在做练习
Graduate.study:每位研究生都在认真学习
Graduate.exercise:所有研究生都在做练习
Graduate.study:每位研究生都在认真学习
Student.exercise:所有学生都在做练习
Graduate.study:每位研究生都在认真学习
Graduate.exercise:所有研究生都在做练习
70 80 65
93 99 85
转载于:https://www.cnblogs.com/jiangyi666/p/5754375.html
覆盖与隐藏的区别 (一个列子)相关推荐
- java 覆盖和隐藏_Java方法的覆盖与隐藏的区别分析
本篇文章介绍了,关于Java方法的覆盖与隐藏的区别分析.需要的朋友参考下 关于隐藏和覆盖的区别,要提到RTTI(run-time type identification)(运行期类型检查),也就是运行 ...
- C++成员函数重载、覆盖和隐藏的区别
*************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...
- C++中类成员函数的重载、覆盖和隐藏的区别,超清楚!
转载:https://www.cnblogs.com/liubo1/p/5925746.html 1.成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: ...
- C++学习笔记-----继承体系中函数的重载,覆盖和隐藏的区别
1.重载,在同一个作用域中定义的同名不同参的一些函数为重载. 2.隐藏,若在基类中定义了某一non_virtual函数,在派生类重存在同名函数(不需要参数列表相同),基类的该函数在派生类中是不可见的, ...
- 【转】c++重载、覆盖、隐藏——理不清的区别
原文网址:http://blog.sina.com.cn/s/blog_492d601f0100jqqm.html 再次把林锐博士的<高质量c++编程指南>翻出来看的时候,再一次的觉得这是 ...
- C++中重载、重写(覆盖)和隐藏的区别实例分析
1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 示例代码如下: ...
- c++ -- 重载、重写(覆盖)和隐藏的区别
重载.重写(覆盖)和隐藏的区别 一.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心 ...
- c++成员函数的重载、覆盖、隐藏区别
c++成员函数的重载.覆盖.隐藏区别 成员函数的重载.覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防. 重载与覆盖 成员函数被重载的特征: (1)相同的范围 ...
- Java习题3(1.封装的意义有哪些?2.final关键字的作用有哪些?3. 简述覆盖与重载的区别。4. 写一个冒泡排序算法。)
1.封装的意义有哪些? 答: 将对象成员保护起来,使用接口对外公开,安全性更高. 读取.修改对象属性更加方便,更具有灵活性. 增加.删除对象属性在对应类中进行操作即可,不影响其他类,可维护性好. 2. ...
最新文章
- 赞!经典教材《统计学习导论》终于有Python版了
- 处理get中的中文乱码情况
- OpenGL多线程实例
- php while for 性能,php的foreach,while,for的性能比较
- Android studio之如何快速查看页面的布局
- java lang保_android – Gson中的RuntimeException解析JSON:无法调用受保护的java.lang.ClassLoader()而没有args...
- 【less-6】sqli-labs靶场第六关(类似less-5)
- SCPPO(二十九):测算过程中问题的解决总结(续)
- stc单片机id加密c语言,STC单片机内部ID读取
- html 简单的table样式
- layabox2.0 开发微信小游戏经验分享
- Python——程序设计:商贷月供计算器!谁还没点月供了!
- 解决雷电模拟器一直出现安全证书有问题
- 商务办公软件应用与实践【8】
- 开题报告(1.研究目标)
- 32、Java高级特性——日期操作类、Date类、SimpleDateFormat类、Calendar类
- 个人面试问答题知识库(一)百面机器学习篇
- 用Matlab作函数的图像
- Vue项目中Echarts流向图迁徙图实现
- JVM学习笔记(二):垃圾回收、垃圾回收算法、垃圾回收器(Serial、Parallel、CMC、G1)、内存分配原则实战
热门文章
- java8 liu_在Java8流中处理输出
- java graphics旋转_Java图像之自定义角度旋转(实例)
- vue中的$event
- Nginx下配置多个web服务
- intellij IDEA 报 非法字符 \65279 原因及解决方法
- 【Luogu1616】疯狂的采药
- oracle declare语法_基于oracle数据库存储过程的创建及调用
- 安卓bmi项目_Android自定义View实现BMI指数条
- JavaScript的for of语法遍历数组元素
- JavaScript文档对象模型document对象查找Html元素(2)