Java基础知识:继承,构造函数和if子句

时间:2018-01-25 08:01:08

标签: java inheritance

我在一个月前开始使用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方法,但怎么可能是假的?这看起来很简单,但我不太明白。

2 个答案:

答案 0 :(得分:0)

您获得的输出是正确的,因为numberUpperclass的属性,它首先通过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);

oktrue所以大括号内的代码没有被执行,只有部分打印不变18(因为number上没有其他操作被执行可以在控制台中更改其值)在该方法中执行(因为无论if语句中的条件是什么,都会执行)。