我在一个月前开始使用Java,我对继承有一个疑问 - 更具体地说,为什么这个程序因此返回18 18。我有以下三个类:
public class Upperclass{
int number = 5;
boolean ok = false;
public Upperclass() {
number = number + 1;
ok = true;
}
}
和
public class Lowerclass extends Upperclass{
public Lowerclass() {
if (ok == true) {
number = number * 3;
}
System.out.print(number + " " );
}
public void doSomething() {
if (ok == false) {
number = number * 3;
}
System.out.print (number);
}
}
和
public class Test {
public static void main (String[] args) {
Lowerclass lc = new Lowerclass();
lc.doSomething();
System.out.println();
}
}
我看到number的初始值是5,ok表示错误。构造函数将值递增为6并将ok更改为true。 Lowerclass的构造函数检查ok是否为真(这是真的)并计算6 * 3并将其保存为数字。其他18似乎来自doSomething方法,但怎么可能是假的?这看起来很简单,但我不太明白。
答案 0 :(得分:0)
您获得的输出是正确的,因为number
是Upperclass
的属性,它首先通过Lowerclass的构造函数打印两次,然后通过doSomething
方法打印。
注意:您的print语句不在doSomething方法中检查true或false,因此始终打印。
答案 1 :(得分:0)
public class Lowerclass extends Upperclass {
public Lowerclass() {
if (ok == true) {
number = number * 3;
}
System.out.print(number + " " ); //first output of 18
}
public void doSomething() {
if (ok == false) {
number = number * 3;
}
System.out.print (number); // second output of 18
}
}
public class Test {
public static void main (String[] args) {
Lowerclass lc = new Lowerclass(); // first output of 18 in constructor
lc.doSomething(); // second output in the method
System.out.println();
}
}
查找
if (ok == false) {
number = number * 3;
}
System.out.print (number);
ok
是true
所以大括号内的代码没有被执行,只有部分打印不变18(因为number
上没有其他操作被执行可以在控制台中更改其值)在该方法中执行(因为无论if
语句中的条件是什么,都会执行)。