`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 对于这个复杂问题的解释说明
  • ¥50 三种调度算法报错 采用的你的方案
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败