我是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();
}
}
答案 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)
因为a
和b
是不同的Java对象。
即,您创建了B
实例b
,该实例从A
类延伸,而不是从a
实例延伸。
您只在实例a
答案 4 :(得分:0)
b.a尚未初始化,因此值为零。
你需要b.a = 2
陈述。