使用构造函数的抽象

时间:2016-12-24 13:54:47

标签: java

我正在尝试使用带有抽象类的构造函数,我能够使用多类中为mul和div抽象方法定义的值,但我想使用构造函数添加中使用的值,即抽象方法添加时的24和4以及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();
    }

}

1 个答案:

答案 0 :(得分:0)

您无法使用抽象类添加中的值,因为multip类的构造函数会覆盖其中的变量a和b的值。构造函数层次结构清楚地表明,首先调用最顶层类的构造函数然后调用第二个最顶层的类:如果C扩展B扩展A,那么将首先调用类A的构造函数然后调用类B的构造函数然后调用C类。因此,在你的代码中,类添加的构造函数将它们初始化为24,4但是类multip的构造函数将它们重写为12,3。因此,变量值保持为12,3,并且可以在abstractpart类的所有方法中访问它。如果要从类添加中访问变量值,则在类multip和addition中使用不同的变量。希望这可以解决您的问题,我已根据您的问题中指定的要求编辑了您的代码:

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

}