在看java继承这一块的时候发现了一个问题,即父类未被子类覆盖的方法是如何调用的?

是子类拥有了父类的该方法只是没有显示表示,还是子类调用了父类的该方法。

为此做了一下验证

代码如下:

public class One {
protected void printA() {
System.out.println("父类printA");
} private void printB() {
System.out.println("父类printB");
} private void printC() {
System.out.println("父类printC");
} protected void printABC() {
printA();
printB();
printC();
}
} public class Two extends One {
protected void printA() {
System.out.println("子类printA");
} private void printB() {
System.out.println("子类printB");
} public void printC() {
System.out.println("父类printC");
} public static void main(String[] args) {
Two t = new Two();
//   One t = new Two();
t.printABC();
}
}

对于第一种情况:子类拥有了父类的该方法只是没 有显示表示

由于printABCD方法中调用了printA()、printB()、printC()、printD(),并且printB()在父类中是私有的,所以不可以被子类继承。如果是这种情况的话,应该会编译时报错。然而没有报错,显然不是第一种情况。

对于第二种情况:子类调用了父类的该方法

根据运行结果

这里就会有个疑问-如果是调用了父类方法为什么会printA会使用子类的方法呢?

事实上运行过程应该是这样的,子类在调用printABCD方法时因为自己没有重写这个方法,所以是调用父类的该方法。

即默认为

@Override
protected void printABCD() {
// TODO Auto-generated method stub
super.printABCD();
}

调用父类printABCD后接着要执行printA()、printB()、printC()、printD()四个方法。其中子类只对printA()进行了覆盖,printB()没有进行覆盖,printC()、printD()不存在覆盖。因此在调父类的printABCD方法,在执行时如果判断内部执行的方法没有对父类的方法进行覆盖则使用父类的方法,否则使用覆盖后的方法。

最新文章

  1. dubbo zk 分布式服务项目搭建与配置
  2. ubuntu 12.10 sourcelist软件更新源列表(zz)
  3. iOS 导航栏实现总结
  4. java中的Robot
  5. 如何通过ps -ef|grep tomcat只获得你需要的查询进程,排除掉grep本身的进程信息
  6. Java——再看IO
  7. eclipse 导入jar包
  8. DATASNAP为支持FIREDAC而增加的远程方法的数据类型TFDJSONDataSets
  9. Android-用webservice连接sqlserver数据库
  10. UI设计(流程/界面)设计规范
  11. Ubuntu16.04 apt源更新
  12. mysql的主从复制
  13. linux学习之netstat
  14. 中国MOOC_面向对象程序设计——Java语言_第4章 继承与多态_第4周编程题_将MP3媒体类型存放进Database
  15. layui table 行号
  16. iPhone开发过程中调试多次Release问题 message sent to deallocated
  17. Python匿名函数详解
  18. SOCKET编程需要注意的问题
  19. C语言--第四次作业
  20. Media Queries 媒体查询

热门文章

  1. python2 + selenium + eclipse 中,通过django生产数据库表的时候报错
  2. CCD与CMOS的区别?
  3. 你所不知道的html5与html中的那些事(四)——文本标签
  4. fastreport整理
  5. 通过bed文件获取fasta序列
  6. FZU2056 最大正方形(二分答案)
  7. 第3章 编写ROS程序-3
  8. 如何選擇最佳的 Wi-Fi 無線網路頻道,獲得最佳的傳輸速度(转载)
  9. 洛谷P1633 二进制
  10. [Xcode 实际操作]七、文件与数据-(12)数据持久化存储框架CoreData的使用:查找CoreData中的数据