例子:

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

覆盖与隐藏的区别 (一个列子)相关推荐

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

    本篇文章介绍了,关于Java方法的覆盖与隐藏的区别分析.需要的朋友参考下 关于隐藏和覆盖的区别,要提到RTTI(run-time type identification)(运行期类型检查),也就是运行 ...

  2. C++成员函数重载、覆盖和隐藏的区别

    *************************************************** 更多精彩,欢迎进入:http://shop115376623.taobao.com ****** ...

  3. C++中类成员函数的重载、覆盖和隐藏的区别,超清楚!

    转载:https://www.cnblogs.com/liubo1/p/5925746.html 1.成员函数被重载的特征: (1)相同的范围(在同一个类中): (2)函数名字相同: (3)参数不同: ...

  4. C++学习笔记-----继承体系中函数的重载,覆盖和隐藏的区别

    1.重载,在同一个作用域中定义的同名不同参的一些函数为重载. 2.隐藏,若在基类中定义了某一non_virtual函数,在派生类重存在同名函数(不需要参数列表相同),基类的该函数在派生类中是不可见的, ...

  5. 【转】c++重载、覆盖、隐藏——理不清的区别

    原文网址:http://blog.sina.com.cn/s/blog_492d601f0100jqqm.html 再次把林锐博士的<高质量c++编程指南>翻出来看的时候,再一次的觉得这是 ...

  6. C++中重载、重写(覆盖)和隐藏的区别实例分析

    1.重载:重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心函数返回类型. 示例代码如下: ...

  7. c++ -- 重载、重写(覆盖)和隐藏的区别

    重载.重写(覆盖)和隐藏的区别 一.重载 重载从overload翻译过来,是指同一可访问区内被声明的几个具有不同参数列(参数的类型,个数,顺序不同)的同名函数,根据参数列表确定调用哪个函数,重载不关心 ...

  8. c++成员函数的重载、覆盖、隐藏区别

    c++成员函数的重载.覆盖.隐藏区别 成员函数的重载.覆盖(override)与隐藏很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防. 重载与覆盖 成员函数被重载的特征: (1)相同的范围 ...

  9. Java习题3(1.封装的意义有哪些?2.final关键字的作用有哪些?3. 简述覆盖与重载的区别。4. 写一个冒泡排序算法。)

    1.封装的意义有哪些? 答: 将对象成员保护起来,使用接口对外公开,安全性更高. 读取.修改对象属性更加方便,更具有灵活性. 增加.删除对象属性在对应类中进行操作即可,不影响其他类,可维护性好. 2. ...

最新文章

  1. 赞!经典教材《统计学习导论》终于有Python版了
  2. 处理get中的中文乱码情况
  3. OpenGL多线程实例
  4. php while for 性能,php的foreach,while,for的性能比较
  5. Android studio之如何快速查看页面的布局
  6. java lang保_android – Gson中的RuntimeException解析JSON:无法调用受保护的java.lang.ClassLoader()而没有args...
  7. 【less-6】sqli-labs靶场第六关(类似less-5)
  8. SCPPO(二十九):测算过程中问题的解决总结(续)
  9. stc单片机id加密c语言,STC单片机内部ID读取
  10. html 简单的table样式
  11. layabox2.0 开发微信小游戏经验分享
  12. Python——程序设计:商贷月供计算器!谁还没点月供了!
  13. 解决雷电模拟器一直出现安全证书有问题
  14. 商务办公软件应用与实践【8】
  15. 开题报告(1.研究目标)
  16. 32、Java高级特性——日期操作类、Date类、SimpleDateFormat类、Calendar类
  17. 个人面试问答题知识库(一)百面机器学习篇
  18. 用Matlab作函数的图像
  19. Vue项目中Echarts流向图迁徙图实现
  20. JVM学习笔记(二):垃圾回收、垃圾回收算法、垃圾回收器(Serial、Parallel、CMC、G1)、内存分配原则实战

热门文章

  1. java8 liu_在Java8流中处理输出
  2. java graphics旋转_Java图像之自定义角度旋转(实例)
  3. vue中的$event
  4. Nginx下配置多个web服务
  5. intellij IDEA 报 非法字符 \65279 原因及解决方法
  6. 【Luogu1616】疯狂的采药
  7. oracle declare语法_基于oracle数据库存储过程的创建及调用
  8. 安卓bmi项目_Android自定义View实现BMI指数条
  9. JavaScript的for of语法遍历数组元素
  10. JavaScript文档对象模型document对象查找Html元素(2)