2013-12-12 80 views
-2

我的新的java ..當我運行此程序我正在此結果的爲什麼我得到錯誤的答案?

值在A類是在B類2
值k的是在B類6
值是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(); 
    } 
} 
+2

你期待什麼價值?由於它沒有分配它有它的默認值,0. – Zong

+0

b和a是不同的實例,所以他們的a有不同的值 – Michael

回答

3

B擴展A,但是2個對象是不一樣的。 A有a = 2,B有a = 0 k = 6。當你調用res時,你在B中添加值。如果你這樣做:

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

它會工作。

0

因爲ab是不同的Java對象。 即,您創建了B實例b,該實例從A類延伸,而不是從a實例延伸。 您只在實例上做了設置a

0

b.a尚未初始化,因此值爲零。 您需要b.a = 2聲明。

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; 

哪一個是正確的?可能是第一個,但是不知道類和屬​​性的目的就說不清楚。

相關問題