【问题标题】:Explain the output of the java program [duplicate]解释java程序的输出[重复]
【发布时间】:2019-05-13 10:50:20
【问题描述】:

我认为输出应该是“cougar cf”,因为调用 Cougar() 应该只打印 cougar,调用 go() 应该为 this.type 打印 'c' 和为 super.type 打印 'f',因为 super 关键字用于调用父类。 谁能验证一下?

class Feline {
    public String type = "f ";

    public Feline() {
        System.out.print("feline ");
    }
}

class Cougar extends Feline {
    public Cougar() {
        System.out.print("cougar ");
    }

    void go() {
        type = "c ";
        System.out.print(this.type + super.type);
    }

    public static void main(String[] args) {
        new Cougar().go();
    }
}

【问题讨论】:

  • 但显示不正确?什么表明它不正确? ...如果您只是在 IDE 中执行它。你会得到结果。
  • 你在问什么......
  • 我猜这是一些考试/认证的问题,对吗?
  • 在这种情况下,只是一个提示:在每个构造函数的第一行中隐式调用了什​​么?
  • @ManishJoshi 只有一个type,它在go() 的第一行被分配了一个新值。 IE。 this.typesuper.type 指的是同一个字段 - 避免使用公共字段的原因之一是它们会导致这种混乱。

标签: java


【解决方案1】:

所以快速回答,输出将是

猫美洲狮c c

现在的原因。

new Cougar() 将创建一个实例Cougar,因为CougarFelineFeline 的构造函数是Cougar 的构造函数中调用的第一个东西。 这解释了“猫美洲狮”。

public Cougar() {
    System.out.print("cougar ");
}

实际上看起来像

public Cougar() {
  super(); //printing "Feline"
    System.out.print("cougar ");
}

现在,this.typesuper.type 都访问在 Feline 中声明的同一个变量。

既然你给它分配了"c",这就解释了输出“c c”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2013-09-06
    相关资源
    最近更新 更多