2016-04-07 3 views
-1

クラスAでクラスBを拡張するようになりました。クラスAで変数aの値を出力します。結果はa = 0です。どのように私はあなたが何に設定し、でなかったとして値a = 2クラスAをクラスAに渡す方法クラスAをクラスBに拡張する場合

クラスA

package testing; 

public class ClassA extends ClassB { 

    public void print(){ 
     System.out.println("a= " +a); 
    } 
    public static void main(String arg[]){ 
     ClassA ca = new ClassA(); 
     ca.print(); 

    } 
} 

クラスB

package testing; 

public class ClassB { 
int a; 
public void send(){ 
    a=2; 
} 
} 

答えて

1

が最初aの値は、0で取得することができますデフォルトでは、new ClassA();を呼び出すと、0に初期化されます。したがって、0が出力になります。

aの値を2に設定するには、sendメソッドを呼び出す必要があります。あなたはとても基本的には0

は、印刷機能の前にsend()への呼び出しを入れているint、コンパイラがする最初のチェックのために初期化された値を印刷して、それに任意の値を割り当てずca.print()を呼び出している

ClassA ca = new ClassA(); 
ca.send(); //Here 
ca.print(); 
0

関数はClassAで送信されますが、それが見つからない場合はBであるSuperClassの送信関数を呼び出します。print()を呼び出すと、クラスAにある印刷関数が呼び出されます今、クラスAにはaという変数はないので、変数aの値はスーパークラスから呼び出されます。値2が出力されます。

A)の送信を呼び出すために、あなたのmainメソッドを変更:あなたのint型の変数は、デフォルトでは、一部のオプションは0

で初期化されている>

public class ClassA extends ClassB { 

    public void print(){ 
     System.out.println("a= " +a); 
    } 
    public static void main(String arg[]){ 
     ClassA ca = new ClassA(); 
     ca.send(); 
     ca.print(); 

    } 
} 

public class ClassB { 
int a; 


public void send(){ 
    a=2; 
} 
} 
+0

に役立ちます。 OPのフォーマットは恐ろしいです。 – bcsb1001

+0

しかし、send()メソッドを呼び出すと、send()メソッドにはもっと多くの関数があります。上記のようにすれば、他のメソッドやロジックも呼び出す/実行することができます。何をするか – DoubtClear

+0

誰かが私の疑問に答えますか? – DoubtClear

0

-

コードは次のようになります。メソッド

ClassA ca = new ClassA(); 
    ca.send(); //set the value to 2 
    ca.print(); 

B)何らかの理由でメインメソッドを変更したくない場合は、 、あなたはクラスのコンストラクタに変数の初期化を移動することができます:あなたは、クラス(新にClassA())をインスタンス化するとき

ClassA() { 
     a = 2 
    } 

さて、「」つもりは別の簡単な方法2.

1

に等しいことクラス間の変数の解析については、get-setメソッドを使用しています。

クラスのコード:

public class ClassA extends ClassB {  
public static void main (String [] args) 
{   
    ClassB ClassBValue = new ClassB(); 
    System.out.println(ClassBValue.getA()); 
} 

}

クラスBコーディング:

public class ClassB { 
    int A = 2;  
    public int getA() 
    { 
     return A; 
    } 
    public void setAValue(int A) 
    { 
     this.A = A; 
    } 
} 

希望、これはコードが全くそのように見てはいけない

関連する問題