首页 > 解决方案 > 解释java程序的输出

问题描述

我认为输出应该是“cougar c f”,因​​为调用Cougar()应该只打印 cougar 并且调用go()应该打印 'c' forthis.type和 'f' for super.type,因为 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();
    }
}

标签: java

解决方案


所以快速回答,输出将是

猫美洲狮 cc

现在的原因。

new Cougar()将创建一个 instance Cougar,因为 aCougar是 a FelineFeline的构造函数是在 的构造函数中调用的第一个东西Cougar。这解释了“猫科美洲狮”。

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

实际上看起来像

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

现在,this.type两者super.type都访问在Feline.

由于您分配"c"给它,这解释了输出“c c”


推荐阅读