Java 了解样本期中考试,带println的多类
大家好,我正在准备期中考试,我正在研究上学期的期中考试样本,答案已经给出了,但我正在试图弄清楚答案是如何产生的。下面的问题和答案,我理解他是如何得到“零”的,而不是其他的: 编写程序Bird.java的10行输出,如下所示Java 了解样本期中考试,带println的多类,java,class,this,public,void,Java,Class,This,Public,Void,大家好,我正在准备期中考试,我正在研究上学期的期中考试样本,答案已经给出了,但我正在试图弄清楚答案是如何产生的。下面的问题和答案,我理解他是如何得到“零”的,而不是其他的: 编写程序Bird.java的10行输出,如下所示 interface Silly { public void narf(); public void poit(Silly s); } public class Bird implements Silly { public static void main(Str
interface Silly {
public void narf();
public void poit(Silly s);
}
public class Bird implements Silly {
public static void main(String args[]) {
System.out.println("zero");
Silly s = new SillyBird(1);
Silly s2 = new Loony();
s.poit(s2);
s2.poit(s);
System.out.println("zymurgy");
}
public Bird() {
this(0);
System.out.println("zircon");
}
public Bird(int i) {
System.out.println("zanzibar");
}
public void narf() {
System.out.println("zort");
}
public void poit(Silly s) {
s.narf();
}
}
class SillyBird extends Bird {
public SillyBird() {
System.out.println("duchess");
}
public SillyBird(int i) {
super(i);
}
public void narf() {
System.out.println("drum");
super.narf();
}
}
class Loony extends SillyBird {
public Loony() {
System.out.println("stupendous");
}
public void narf() {
System.out.println("snark");
}
}
他的答案是:零
桑给巴尔
桑给巴尔
锆石
公爵夫人
惊人的
咆哮
鼓
佐尔特
发酵术如果你不明白“他是如何得到其余的”——你需要阅读关于对象、类和接口的基本教程。从提供的一个开始。简而言之,print语句的执行顺序与构造函数和重写方法的执行顺序相同。例如,打印第二个单词“桑给巴尔”,因为
public SillyBird(int i) {
super(i);
}
调用构造函数s=new-SillyBird(1)代码>,它调用:
public Bird(int i) {
System.out.println("zanzibar");
}
通过super(i)
调用
现在试着解释一下第二次“桑给巴尔”打印是如何发生的。你可能没有得到的是,如果构造函数没有明确地调用super(),那么编译器会在构造函数的最开始添加一个super()
调用。所以
public SillyBird() {
System.out.println("duchess");
}
相当于
public SillyBird() {
super();
System.out.println("duchess");
}
在没有构造函数的最开始处添加super()
调用,然后按照调用进行操作,您将找到答案。例如,调用
Silly s2 = new Loony();
调用调用super()的Loony
构造函数。因此调用了SillyBird no arg构造函数,它首先调用super()。因此调用Bird no arg构造函数,它调用this(0)
。因此调用Bird的1-arg构造函数,等等
interface Silly {
public void narf();
public void poit(Silly s);
}
public class Bird implements Silly {
public static void main(String args[]) {
System.out.println("zero"); // 1. zero
Silly s = new SillyBird(1); // 2. zanzibar
Silly s2 = new Loony(); // 3. zanzibar zircon duchess stupendous
s.poit(s2); // 4. snark
s2.poit(s); // 5. drum zort
System.out.println("zymurgy");// 6. zymurgy
}
public Bird() {
this(0);
System.out.println("zircon");
}
public Bird(int i) {
System.out.println("zanzibar");
}
public void narf() {
System.out.println("zort");
}
public void poit(Silly s) {
s.narf();
}
}
class SillyBird extends Bird {
public SillyBird() {
System.out.println("duchess");
}
public SillyBird(int i) {
super(i);
}
public void narf() {
System.out.println("drum");
super.narf();
}
}
class Loony extends SillyBird {
public Loony() {
System.out.println("stupendous");
}
public void narf() {
System.out.println("snark");
}
}
我希望这有助于。。。我认为需要了解的最重要的一点是第3点,这里有隐式super()调用