Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将抽象与构造函数结合使用_Java - Fatal编程技术网

Java 将抽象与构造函数结合使用

Java 将抽象与构造函数结合使用,java,Java,我正在尝试将构造函数用于抽象类,我能够使用mult类中为mul和div抽象方法定义的值,但我想使用构造函数加法中使用的值,即在main中调用抽象方法add和sub时使用24和4。 有人能建议我该怎么做吗 提前谢谢 package repeatPracticeJava; abstract class addition{ addition(){ this.a=24; this.b=4; } int a,b,c; String st

我正在尝试将构造函数用于抽象类,我能够使用mult类中为mul和div抽象方法定义的值,但我想使用构造函数加法中使用的值,即在main中调用抽象方法add和sub时使用24和4。 有人能建议我该怎么做吗

提前谢谢

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

}

您无法在抽象类添加中使用这些值,因为multip类的构造函数正在覆盖其中变量a和b的值。构造函数层次结构清楚地表明,首先调用最顶层类的构造函数,然后调用第二个最顶层类的构造函数。例如:如果C扩展了B扩展了A,那么将首先调用A类的构造函数,然后调用B类的构造函数,然后调用C类的构造函数。因此,在代码中,类addition的构造函数将它们初始化为24,4,而类multi的构造函数将它们重写为12,3。因此,变量值保持为12,3,并且在abstractpart类的所有方法中都可以访问它。如果要从类加法访问变量值,则在类multi和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();
}

}