2016-12-24 111 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(); 
} 

}