在抽象类的抽象方法在Java

时间:2018-01-13 11:11:17

标签: java abstract-class

在Java中有可能吗?或者我可以在定义它之前使用任何方法吗?

我在Abstract类中尝试过,但JVM表示abstarct方法不能是静态的。然后我尝试将类定义为对象,但我没有使用'extends'。他们俩都给了我一个错误。

3 个答案:

答案 0 :(得分:0)

是的,您也可以使用抽象方法,但不能使用静态方法。静态方法必须有一个主体,即使它们是抽象类的一部分,因为不需要创建类的实例来访问它的静态方法。

答案 1 :(得分:0)

可以调用Object上的抽象方法,因为Object要存在,它本身必须实例化一个扩展抽象类的类(从而实现了方法)。

无法创建静态抽象方法,因为当您尝试调用该方法时,将无法实现该方法。在Class上调用静态方法。

public abstract class AbstractClass {
    public static abstract void staticAbstract();
    public abstract void instanceAbstract();
}

以上面的例子为例;我在那里定义了两种方法。

要调用静态方法,您可以在AbstractClass AbstractClass.staticAbstract();上调用它,但是,AbstractClass没有此方法的实现。您的编译器将如何知道如何处理该方法?

但是,要调用实例方法,您需要在Object上调用它。由于您无法实例化抽象类,因此要使Object存在以便您可以调用实例方法,Object所属的类必须已实现该方法。

public class RealClass extends AbstractClass {
    public instanceAbstract();
}

班级RealClass扩展了AbstractClass,因此必须实施instanceAbstract();

AbstractClass class = new RealClass();
class.instanceAbstract();

您创建RealClass的实例,为了演示,您将其分配给AbstractClass类型的变量。尽管AbstractClass.instanceAbstract();方法没有实现,但您可以在Object上调用抽象方法; RealClass提供了实施。

答案 2 :(得分:0)

是的,可以在抽象类中定义之前调用抽象方法。假设您设计了一个基础公式类:

public abstract class AbstractFormula {

    protected abstract void initialize();

    public double evaluate() {
        initialize();
        //
        // do the logic
        //
        return 0d; // the result
    }
}

还假设评估公式的逻辑是:

  1. 初始化系数
  2. 做数学计算结果
  3. 因此evaluate()方法的默认实现是调用initialize()方法然后进行计算。换句话说,您可能不知道在AbstractFormula的所有可能实现中初始化系数的逻辑,但您可以在抽象类的其他方法中调用它。

    您可以首先创建静态抽象方法。因为静态方法是类方法,可以在不创建该类的对象的情况下调用。因此,使用静态抽象方法毫无意义。 static方法在定义时应该有自己的身体。