子类不更新从基类中获取的变量

时间:2015-07-02 16:22:52

标签: java

为什么我的输出没有给出预期的结果,即25?我知道我的问题很愚蠢,但我是Java编程的新手。 输出是

run:
5
0
0
BUILD SUCCESSFUL (total time: 0 seconds)

但根据我的预期答案是5,因为我在议案中通过了5。

class A {
    int a;

    public void setA(int a) {
        this.a = a;
    }    
}

class B extends A {    
    public int multi() {
        int multi = a * a;
        System.out.println(multi);
        return multi;
    }    
}

class test {
    public static void main(String[] args) {
        A obj1 = new A();
        obj1.setA(5);
        B obj2 = new B();
        int c = obj2.multi();
        System.out.println(c);        
    }    
}

1 个答案:

答案 0 :(得分:3)

  

为什么输出没有给出预期结果,即25

因为您有两个不同的对象,每个对象都有一个独立的a字段。您在一个对象中将值设置为5,然后在另一个对象上调用multi(),因此它使用字段的默认值(0)。

如果您对这两个部分使用相同的对象,您将得到正确的答案:

B obj2 = new B();
A obj1 = obj2; // Now obj1 and obj2 refer to the same object
obj1.setA(5);
System.out.println(obj2.multi());