2016-12-24 116 views
-3

我想使用抽象類的構造函數,我能夠使用多類中定義的值爲多和抽象方法,但我想使用值在構造函數中添加即24和4抽象方法在main中調用add和sub。 有人可以建議我應該做些什麼。使用抽象與構造函數

在此先感謝。

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擴展A,則類A的構造函數將首先調用,然後調用B類的構造函數然後調用C類。因此,在你的代碼中,類加法的構造函數將它們初始化爲24,4,但類multip的構造函數將它們覆蓋爲12,3。因此,變量值保持爲12,3,並且它正在所有的abstractpart類的方法中被訪問。如果你想從類加法訪問變量值,那麼在類乘法和加法中有不同的變量。希望這可能會解決您的問題,我已編輯您的代碼,它將根據您的要求中指定的要求工作:

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(); 
} 

}