2016-10-28 39 views
-1

我寫了一段代碼如下:Java如何使用子類的某個函數()中的變量?

class MyParent { 
    String a = "abcdefg"; 
    String b; 
    public void print() { 
     b = "ABCDEFG"; 
     System.out.println(a); 
    } 
} 
class MyChild extends MyParent { 
    String c = super.b; 
    public void print2() { 
     System.out.println(c); 
    } 
} 

public class Parent { 
    public static void main(String args[]) { 
     MyParent mp = new MyParent(); 
     mp.print(); 
     MyChild mc = new MyChild(); 
     mc.print2();  
    } 
} 

有兩類,他們是父母&孩子。 在class MyParent中聲明瞭b,並在函數print()中給出了一個值。
我想在子類MyChild中打印b。但是如果我運行代碼,它可以正確打印,但b顯示null

我是Java新手。請幫助我。


UPDATE

謝謝大家回答我的問題。我找到了解決方案。

我用最簡單的方法。我將它改爲**static String b**

靜態使我的論點可以四處使用。

但我不知道使用數據聲明的確切方式。所以我會繼續學習。

+0

https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html,http://www.javaworld.com/article/2987426/core-java/java-101-繼承功能於Java的部分1。html –

+0

您已經創建了兩個完全獨立的對象 - 「mp.b」將是「ABCDFEF」,但「mc.b」是「null」,因爲您從未將其設置爲其他任何對象。 –

回答

0

mp和mc對象的實例是不同的。因此,b的值在對象mp中設置爲「ABCDEFG」,但mc.b仍然爲空。

嘗試調用mc.print()然後mc.print2()

但是如果你想要對象的不同實例,以B股對更新的相同的值,那麼你可以讓b靜態。

0

你必須調用

print() 

MyParent的方法來初始化「B」。你沒有初始化它。

2

它打印null,因爲在MyParent類中聲明它爲空String。您在print()方法中初始化了b。所以,如果你想利用b值,你可以這樣做:

MyChild mc = new MyChild(); 
mc.print(); 
0

當你讓擴展類埃夫裏的方法和屬性,誰得到保護,少去孩子現在如果父母有串B中的孩子也得到了字符串b 如果你想要字符串b的孩子將是相同的價值的字符串b在父母u做一個構造函數,並在構造函數this.b = super.b及其意義當你創建的對象子類它初始化屬性。 現在在這個代碼中,你不應該像面向對象那樣初始化屬性。

class MyParent { 
      String a = "abcdefg"; 
      String b="ABCDEFG"; 

      public MyParent(){} 

      public void print() { 
       System.out.println(a); 
      } 
     } 

    class MyChild extends MyParent { 
     public MyChild(){ 
     this.b =super.b; 
    } 
     public void print2() { 

      System.out.println(b); 
    } 
} 

    public class Parent { 
     public static void main(String args[]) { 
      MyParent mp = new MyParent(); 
      mp.print(); 
      MyChild mc = new MyChild(); 
      mc.print2();  
     } 
    } 
相關問題