首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java-SCJP问题

Java-SCJP问题
EN

Stack Overflow用户
提问于 2010-07-14 10:48:49
回答 2查看 403关注 0票数 0

考虑一下:

代码语言:javascript
复制
class Building {
    Building() {
        System.out.print("b ");
    }
    Building(String name) {
        this();
        System.out.print("bn "+name);
    }
}
public class House extends Building {
    House() {
        System.out.print("h ");
    }
    House(String name) {
        this();
        System.out.print("hn "+name);
    }
    public static void main(String a[]) {
        new House("x ");
    }
}

对于上面的程序,我认为输出一定是h hn x,但是输出是b h hn x。

为什么?

后来

代码语言:javascript
复制
public class TestDays {

    public enum Days {
        MON,TUE,WED
    };
    public static void main(String []args) {

        for(Days d : Days.values())
        ;
        Days [] d2=Days.values();
        System.out.println(d2[2]);

    }

}

我看不懂上面的程序。请帮帮我。

代码语言:javascript
复制
class Mammal {

    String name="furry";
    String makeNoise() {
        return "generic noise";
    }

}

class Zebra extends Mammal {

    String name="stripes";
    String makeNoise() {
        return "bray";
    }

}
public class ZooKeeper {

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

        Mammal m=new Zebra();
        System.out.println(m.name+m.makeNoise());

    }

}

在上面的程序中,makeNoise()被覆盖。因此输出必须是条纹bray。但是输出是毛茸茸的bray。

EN

回答 2

Stack Overflow用户

发布于 2010-07-14 10:59:06

问题1:

我以为输出一定是

x,但是输出是b h hn x。

您忽略了这样一个事实:House()构造函数隐式地调用Building的无参数构造函数。

问题2:

我看不懂上面的程序。请帮帮我。

它正在打印枚举的第三个值。空的for循环看起来有点奇怪,但我怀疑这只是一个输入错误。如果有其他你不理解的东西,你必须说出是什么。(我把读心器头盔忘在家里了……乔恩·斯基特睡着了。)

问题3:

在上面的程序中,makeNoise()被覆盖。因此输出必须是条纹bray。但是输出是毛茸茸的bray。

你看到“毛发”而不是“条纹”的原因是一个类的属性是而不是覆盖的。一个Zebra实例实际上有两个名为name的字段,您的代码绑定到一个或另一个取决于引用变量的声明类型。在本例中,声明的m类型为Mammal,因此您将获得该名称的哺乳动物版本。

票数 3
EN

Stack Overflow用户

发布于 2010-07-14 11:22:34

1.- b最先出现,因为下面的代码:

代码语言:javascript
复制
House() {
    System.out.print("h ");
}

首先调用超类no args构造函数(这是由编译器完成的),所以你应该这样想:

代码语言:javascript
复制
House() {
    super();
    System.out.print("h ");
}

2-您正在声明一个Java enum

for循环迭代所有可能的值( MON、TUE、WED )

代码语言:javascript
复制
    for(Days d : Days.values())
    ;

但是,它不会做任何事情(参见;这意味着“什么都不做”)

然后,使用这些值创建一个数组

代码语言:javascript
复制
    Days [] d2=Days.values();

最后打印第三个位置( Java中的数组是从零开始的,所以0-1-2是第三个位置)

代码语言:javascript
复制
    System.out.println(d2[2]);

哪种方式打印WED

3.-参见Stephen C answer。您将获得超类属性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3243068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档