抽象类可以有构造函数吗?

如果可以,如何使用它,用于什么目的?


当前回答

是的,它可以有一个构造函数,它的定义和行为就像任何其他类的构造函数一样。除了抽象类不能直接实例化,只能扩展,因此使用总是来自子类的构造函数。

其他回答

package Test1;

public class AbstractClassConstructor {

    public AbstractClassConstructor() {
        
    }

    public static void main(String args[]) {
       Demo obj = new Test("Test of code has started");
       obj.test1();
    }
}

abstract class Demo{
    protected final String demoValue;
       
    public Demo(String testName){
        this.demoValue = testName;
    }
       
    public abstract boolean test1();
}

class Test extends Demo{
       
    public Test(String name){
        super(name);
    }

    @Override
    public boolean test1() {
       System.out.println( this.demoValue + " Demo test started");
       return true;
    }
   
}

一个抽象类可以有一个构造函数,但是你不能创建一个抽象类的对象,那么你如何使用那个构造函数呢?

问题是,当你在子类中继承抽象类时,你可以通过子类中的super(value)方法将值传递给它的(抽象的)构造函数,不,你不继承构造函数。

所以使用super,你可以在抽象类的构造函数中传递值,据我所知,它必须是你的方法或构造函数中的第一个语句。

正如javafuns在这里描述的,这是一个例子:

public abstract class TestEngine
{
   private String engineId;
   private String engineName;

   public TestEngine(String engineId , String engineName)
   {
     this.engineId = engineId;
     this.engineName = engineName;
   }
   //public gettors and settors
   public abstract void scheduleTest();
}


public class JavaTestEngine extends TestEngine
{

   private String typeName;

   public JavaTestEngine(String engineId , String engineName , String typeName)
   {
      super(engineId , engineName);
      this.typeName = typeName;
   }

   public void scheduleTest()
   {
     //do Stuff
   }
}

是的!抽象类可以有构造函数!

是的,当我们将一个类定义为抽象类时,它不能被实例化,但这并不意味着抽象类不能有构造函数。每个抽象类必须有一个具体的子类,该子类将实现该抽象类的抽象方法。

当我们创建任何子类的对象时,相应继承树中的所有构造函数都将以自顶向下的方式调用。同样的情况也适用于抽象类。虽然我们不能创建抽象类的对象,但是当我们创建抽象类的具体子类类的对象时,抽象类的构造函数将被自动调用。因此,我们可以在抽象类中使用构造函数。

注意:非抽象类不能有抽象方法,但抽象类可以有非抽象方法。原因类似于构造函数,不同之处在于我们可以调用super()而不是自动调用。此外,没有什么东西像抽象构造函数一样,因为它根本没有意义。

是的,就像其他课程一样。它可以有一个构造函数,在为基类创建对象后调用它。