`Unstoppable ` 2020-03-04 17:47 采纳率: 0%
浏览 146
已采纳

构造器的调用问题,继承方法的覆盖问题

package main;

class Glyph{
    void draw() {
        System.out.println("Glyph.draw()");
    }
    Glyph(){
        System.out.println("Glyph() before draw()");
        draw();
        System.out.println("Glyph() after draw()");
    }
}

class RoundGlyph extends Glyph{
    private int radius = 1;
    public RoundGlyph(int r) {
        radius = r;
        System.out.println("RoundGlyph");
    }
    void draw() {
        System.out.println("RoundGlyph.draw()");
    }
}

public class test {

    public static void main(String[] args) {
        new RoundGlyph(4);
    }

}


输出为:
Glyph() before draw()
RoundGlyph.draw()
Glyph() after draw()
RoundGlyph
为什么基类构造器调用的draw()方法是RoundGlyph的,难道在基类构造器中的调用已经发生了导出类draw的重写了吗?

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-03-04 20:45
    关注

    坦率地说,这种程序在开发中没有任何实际的意义,应该被禁止。
    因为基类构造函数在派生类的构造函数之前被调用。而构造函数被假定是最早被执行的。
    成员函数比构造函数早执行,这种情况带来很多未知的后果。

    你的困惑很正常——这是语法没有禁止,但是程序员应该避免的写法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建