在Java中有可能吗?或者我可以在定义它之前使用任何方法吗?
我在Abstract类中尝试过,但JVM表示abstarct方法不能是静态的。然后我尝试将类定义为对象,但我没有使用'extends'。他们俩都给了我一个错误。
答案 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
}
}
还假设评估公式的逻辑是:
因此evaluate()
方法的默认实现是调用initialize()
方法然后进行计算。换句话说,您可能不知道在AbstractFormula
的所有可能实现中初始化系数的逻辑,但您可以在抽象类的其他方法中调用它。
但您可以不首先创建静态抽象方法。因为静态方法是类方法,可以在不创建该类的对象的情况下调用。因此,使用静态抽象方法毫无意义。 static
方法在定义时应该有自己的身体。