2016-12-24 19 views
-3

抽象クラスでコンストラクタを使用しようとしていますが、mulとdiv抽象メソッドに複数のクラスで定義された値を使用できますが、コンストラクタの追加で使用される値、 addとsubはmainで呼び出されます。 誰かが同じように何をすべきか提案することはできますか?コンストラクタで抽象化を使用する

ありがとうございます。

package repeatPracticeJava; 

abstract class addition{ 
    addition(){ 
     this.a=24; 
     this.b=4; 

    } 

    int a,b,c; 
    String str; 
    abstract void add(); 
    abstract void sub(); 
    //abstract void mul(); 
    //abstract void div(); 
} 

abstract class multip extends addition{ 
    multip(){ 
     this.a=12; 
     this.b=3; 
    } 

    multip(String str){ 
     this.str="ajay"; 
     this.a=100; 
     this.b=5; 
    } 
    abstract void mul(); 
    abstract void div();  
} 

public class abstractprat extends multip{ 

    @Override 
    void mul() { 
     // TODO Auto-generated method stub 
     c=a*b; 
     System.out.println(c); 
    } 

    @Override 
    void div() { 
     // TODO Auto-generated method stub 
     c=a/b; 
     System.out.println(c); 
    } 

    @Override 
    void add() { 
     // TODO Auto-generated method stub 
     c=a+b; 
     System.out.println(c); 
    } 

    @Override 
    void sub() { 
     // TODO Auto-generated method stub 
     c=a-b; 
     System.out.println(c); 
    } 

    public static void main(String[] args){ 

     abstractprat obj = new abstractprat(); 

     obj.mul(); 
     obj.div(); 
     obj.add(); 
     obj.sub(); 
    } 

} 

答えて

0

multipクラスのコンストラクタとしての変数a、bの値を上書きしているので、あなたは、抽象クラスのほかに値を使用することはできません。コンストラクタ階層では、最初に一番上のクラスのコンストラクタが呼び出され、次に二番目に上のクラスが呼び出されることが明示されています。ex:CがB extends Aを拡張する場合、クラスAのコンストラクタが最初に呼び出され、次にクラスBのコンストラクタクラスCのクラスが呼び出されます。したがって、あなたのコードでは、クラス追加のコンストラクタはそれらを24,4に初期化しますが、クラスのコンストラクタはそれらを12,3に上書きします。したがって、変数の値は12,3のままで、抽象クラスのすべてのメソッドでアクセスされています。クラス追加の変数値にアクセスする場合は、クラスのmultipとaddで異なる変数を使用します。これで問題が解決されることを願って、あなたの質問に指定された要件に応じて動作するコードを編集しました:

abstract class addition{ 
    int a,b,c; 
addition(){ 
    this.a=24; 
    this.b=4; 

} 


String str; 
abstract void add(); 
abstract void sub(); 

} 

abstract class multip extends addition{ 

    int a1,b1,c1;  

    multip(){ 
    this.a1=12; 
    this.b1=3; 
} 

multip(String str){ 
    this.str="ajay"; 
    this.a1=100; 
    this.b1=5; 
} 
abstract void mul(); 
abstract void div();  
} 

public class abstractpart extends multip{ 

@Override 
void mul() { 
    // TODO Auto-generated method stub 
    c1=a1*b1; 
    System.out.println(c1); 
} 

@Override 
void div() { 
    // TODO Auto-generated method stub 
    c1=a1/b1; 
    System.out.println(c1); 
} 

@Override 
void add() { 
    // TODO Auto-generated method stub 
    c=a+b; 
    System.out.println(c); 
} 

@Override 
void sub() { 
    // TODO Auto-generated method stub 
    c=a-b; 
    System.out.println(c); 
} 

public static void main(String[] args){ 

    Test2 obj = new Test2(); 

    obj.mul(); 
    obj.div(); 
    obj.add(); 
    obj.sub(); 
} 

} 
関連する問題