Rus*_*ser 47
在Java中,您可以在抽象类中使用静态方法:
abstract class Foo {
static void bar() { }
}
Run Code Online (Sandbox Code Playgroud)
这是允许的,因为即使您没有抽象类的实例,也可以直接调用该方法:
Foo.bar();
Run Code Online (Sandbox Code Playgroud)
但是,出于同样的原因,您不能将静态方法声明为抽象.通常,编译器可以保证抽象方法在调用它时会有实际的实现,因为您无法创建抽象类的实例.但是由于可以直接调用静态方法,因此将其抽象化可以调用未定义的方法.
abstract class Foo {
abstract static void bar();
}
// Calling a method with no body!
Foo.bar();
Run Code Online (Sandbox Code Playgroud)
在接口中,所有方法都是隐式抽象的.这就是接口无法声明静态方法的原因.(没有架构原因,为什么接口不能有静态方法,但我怀疑JLS的编写者认为这会鼓励滥用接口)
Dul*_*nga 21
如果你在谈论java,答案是肯定但你需要定义静态方法.您无法创建抽象静态方法.你可以创建的是非抽象静态方法.
原因是您不需要对象实例来访问静态方法,因此您需要使用某个功能定义该方法.
所以你不能拥有,
abstract class AbstractClassExample{
abstract static void method();
}
Run Code Online (Sandbox Code Playgroud)
但是你可以拥有,
abstract class AbstractClassExample{
static void method(){}
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助...
这里有一个简单的解释.抽象方法必须在以后实现.我们知道静态方法不能被覆盖,因为静态方法不属于任何特定的实例,而是属于类.然后抽象方法的不同实现,这是静态的,在不同的类中是违反直觉的.
小智 5
是的,您当然可以在抽象类中定义静态方法。您可以使用抽象类或扩展抽象类的子类来调用该静态方法。还可以通过子类实例/对象来调用静态方法。为了说明进一步的测试,下面举一个例子。
//Parent class
public abstract class TestAbstractClass {
static void testStaticMethod(){
System.out.println("In Parent class static method");
}
}
//child class
public class ChildClass extends TestAbstractClass {
public static void main(String[] args) {
TestAbstractClass parentObj = new ChildClass();
parentObj .testStaticMethod();
ChildClass childObj = new ChildClass();
childObj.testStaticMethod();
TestAbstractClass.testStaticMethod();
childClass.testStaticMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80888 次 |
| 最近记录: |