看Think in Java,遇到个程序

classEgg2 {protected classYolk {publicYolk() {

System.out.println("Egg2.Yolk()");

}public voidf() {

System.out.println("Egg2.Yolk.f()");

}

}private Yolk y = newYolk();publicEgg2() {

System.out.println("New Egg2()");

}public voidinsertYolk(Yolk yy) {

y=yy;

}public voidg() {

y.f();

}

}public class BigEgg2 extendsEgg2 {public class Yolk extendsEgg2.Yolk {publicYolk() {

System.out.println("BigEgg2.Yolk()");

}public voidf() {

System.out.println("BigEgg2.Yolk.f()");

}

}publicBigEgg2() {

insertYolk(newYolk());

}public static voidmain(String[] args) {//Egg2 e1 = null;//Egg2 e2 = new BigEgg2();//new Egg2();

newBigEgg2();//e2.g();

}

}///:~

输出

Egg2.Yolk()

New Egg2()

Egg2.Yolk()

BigEgg2.Yolk()

其实基本上我根据后面的几个注释,也大概明白了看的顺序构造顺序是什么,见图

构造顺序图

但是,看了输出,我就纳闷为什么,为什么第三行不是BigEgg2.Yolk(),不能覆盖吗?

Egg2.Yolk()

New Egg2()

Egg2.Yolk()

BigEgg2.Yolk()

分析一下

BigEgg2是Egg2的子类,他们都有Yolk的内部类,而且BigEgg2.Yolk继承了Egg2.Yolk。注意此处,同名类可以继承。

那么,他们构造方法为什么不能覆盖,都是Public Yolk(){}。

当然,网上都说子类继承父类除构造方法以外的所有方法,但这是结果,我要知道为什么!!

先说几个错误的观点

1.

有说构造方法的方法名与类名必须一样,父子类不能同名,故不能继,所以不能覆盖构造方法。

这个不用多说,这个例子,就是大神写出来打这样说的人的脸的。

2.

有说因为子类继承父类的时候,先运行父类构造函数;具体的说就是运行父类时就会先“调用”父类的构造函数,注意“调用”和继承不是一个含义,实质上是“自动运行”。

这个强行用中文语法来解释的,达到中文6级了啊。

3.

有说构造方法不是成员函数,故不能继承,所以谈不上覆盖。

这个真的有道理,是java官方文档上的。大多数人找到这里估计就满足了。

但是,跟太阳从东方升起西方落下那样,我想知道为甚么这么设计啊啊啊啊啊啊!!!!!

4.

正确答案

(1).构造器代表这个类本身,在创建之时申请内存。

(2).子类创建的时候,会默认在构造方法的第一行调用父类的默认构造方法-,若修改了必须显示调用。(这就是为什么创建子类时先创建完父类的原因了)

那么很明显了,要是同名类之间可以覆盖了,子类创建时就是创建了两个自己而没有父类。

Java设计的时候,他们绝对想到有些人会像强迫症那样折腾个同名类继承,然后实现构造覆盖的场景吧....

总结

构造方法是唯一的,不能又造爸爸又造儿子

java方法不可覆盖_详解Java构造方法为什么不能覆盖,我的钻牛角尖病又犯了.......相关推荐

  1. java 配置文件的路径_详解java配置文件的路径问题

    详解java配置文件的路径问题 详解java配置文件的路径问题 各种语言都有自己所支持的配置文件,配置文件中有很多变量是经常改变的.不将程序中的各种变量写死,这样能更方便地脱离程序本身去修改相关变量设 ...

  2. java的注解方式_详解Java注解的实现与使用方法

    详解Java注解的实现与使用方法 Java注解是java5版本发布的,其作用就是节省配置文件,增强代码可读性.在如今各种框架及开发中非常常见,特此说明一下. 如何创建一个注解 每一个自定义的注解都由四 ...

  3. java同步异步调用_详解java 三种调用机制(同步、回调、异步)

    1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,jsPwwCe它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消 ...

  4. java 死锁 内存消耗_详解Java中synchronized关键字的死锁和内存占用问题

    先看一段synchronized 的详解: synchronized 是 java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码. 一.当两个并 ...

  5. java 线程一直运行状态_详解JAVA 线程-线程的状态有哪些?它是如何工作的?

    线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在. 一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源.更加轻量化,也因 ...

  6. java注解 源码_详解Java注解教程及自定义注解

    详解Java注解教程及自定义注解 更新时间:2016-02-26 11:47:06   作者:佚名   我要评论(0) Java注解提供了关于代码的一些信息,但并不直接作用于它所注解的代码内容.在这个 ...

  7. java集合for循环_详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...

  8. java访问本地文件_详解Java读取本地文件并显示在JSP文件中

    详解Java读取本地文件并显示在JSP文件中 当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片.其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相 ...

  9. java的自动装箱_详解Java 自动装箱与拆箱的实现原理

    详解Java 自动装箱与拆箱的实现原理 发布于 2020-7-4| 复制链接 本篇文章主要介绍了详解Java 自动装箱与拆箱的实现原理,小妖觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小妖 ...

  10. java中this.getclass()_详解java中this.getClass()和super.getClass()的实例

    详解java中this.getClass()和super.getClass()的实例 前言: 遇到this.getClass()和super.getClass()的返回值感到疑惑,经过探索豁然开朗. ...

最新文章

  1. Xen虚拟化之一:Xen环境组件详解
  2. 全球及中国建筑产业十四五建设机会与运营风险探析报告2022版
  3. 互换性与技术测量电子版_181套建设工程全套资料表格,从开工到完工,完整电子版手慢无...
  4. pySpark环境搭建
  5. 洛谷 P1313 计算系数
  6. 阿里主管通知我试用期延期……
  7. Django-session操作
  8. AndroidUI高级之十六使用Intent进行通信
  9. DesignPattern_Java:设计模式分类和设计原则
  10. python数据挖掘实验报告_Python数据挖掘实践—决策树
  11. opencv3/C++ 机器学习-EM算法/Expectation Maximization
  12. Win10自带工具DISM修复系统
  13. 英伟达最新驱动打开3d vision功能
  14. 中国K12在线教育用户消费行为报告
  15. 一定能用到的简单但实用的五种按钮样式(原生HTML+CSS步骤详解,含详细注释)
  16. 英特尔第十代处理器为什么不支持win7_Intel 第十代CPU(部分U)装WIN7
  17. 安卓客户端开发!如何试出一个Android开发者真正的水平?分享PDF高清版
  18. MySQL查询语句练习题(面试时可能会遇到哦!)
  19. 假面舞会狂欢节·圆桌 | 当Thinker遇上Artist
  20. Linux上C语言程序编译过程详解

热门文章

  1. 求大佬帮Ansys三维地质体建模
  2. Shell—grep、sed、awk
  3. Java并发编程实战~CyclicBarrier
  4. python正方形阴影面积计算_利用Python求阴影部分的面积实例代码
  5. 加油站都需要什么手续_农村买房过户都需要什么手续?
  6. 销售流程图_工作流程图网络图模板,招聘销售合同库存,完整设计拿来就用
  7. go 单元测试 testing 打印输出_2020,你需掌握go 单元测试进阶篇
  8. 口琴膜片什么作用_2020年半音阶口琴选购攻略,让小白告别选择困难
  9. rpgmvp图片怎么看_拼多多商城图片和视频下载不了怎么办,看这里。。。。
  10. java将数字替换为空_将数字替换为java中正确位置的单词