为什么我得错了答案?

时间:2013-12-12 18:15:23

标签: java

我是java新手..当我运行这个程序时,我得到了这个结果

A类中a的值为2
B类中k的值为6
B类中a的值为0
总和是6

为什么我在B级得到a的值是0?

class A{
    int a;
    void showa(){
        System.out.println("value of a in class A is "+a);
    }
}
class B extends A{
    int k;
    void showk(){
        System.out.println("value of k in class B is "+k);
        System.out.println("value of a in class B is "+a);
    }
    void res(){
        System.out.println("sun is "+(k+a));    
    }
}
public class test1 {
    public static void main(String args[]){
        A a = new A();
        a.a=2;
        B b = new B();
        b.k =6;
        a.showa();
        b.showk();
        b.res();
    }
}

5 个答案:

答案 0 :(得分:3)

B扩展了A,但是2个对象不一样。 A具有a = 2,B具有= 0k = 6。当你调用res时,你在B中添加值。如果你这样做:

B b = new B();
b.a = 2;    
b.k =6; 

它会起作用。

答案 1 :(得分:1)

有类(static)属性和对象属性。您声明了对象属性。因此,您的代码归结为

a.a = 2;
b.k = 6;
println(b.a + b.k);

问题是你从未设置b.a

修复1:

public static void main(String args[]) {
    B b = new B();
    b.a = 2;
    b.k = 6;
    b.showa();
    b.showk();
    b.res();
}

修复2:

static int a;   // Instead of int a;
static int k;   // Instead of int k;

哪一个是正确的?可能是第一个,但是如果不知道类和属​​性的目的,就无法分辨。

答案 2 :(得分:0)

B实例b中,您从未设置a的值,因此Java为其提供了默认值0。

答案 3 :(得分:0)

因为ab是不同的Java对象。 即,您创建了B实例b,该实例从A类延伸,而不是从a实例延伸。 您只在实例a

上创建了集合

答案 4 :(得分:0)

b.a尚未初始化,因此值为零。 你需要b.a = 2陈述。