问题是,在Java中为什么不能定义抽象静态方法?例如
abstract class foo {
abstract void bar( ); // <-- this is ok
abstract static void bar2(); //<-- this isn't why?
}
问题是,在Java中为什么不能定义抽象静态方法?例如
abstract class foo {
abstract void bar( ); // <-- this is ok
abstract static void bar2(); //<-- this isn't why?
}
当前回答
首先,关于抽象类的一个关键点—— 抽象类不能被实例化(参见wiki)。因此,您不能创建抽象类的任何实例。
现在,java处理静态方法的方法是与该类的所有实例共享该方法。
所以,如果你不能实例化一个类,这个类就不能有抽象静态方法,因为抽象方法需要扩展。
繁荣。
其他回答
因为抽象方法总是需要通过子类来实现。但是如果你将任何方法设置为静态,那么就不可能重写这个方法
例子
abstract class foo {
abstract static void bar2();
}
class Bar extends foo {
//in this if you override foo class static method then it will give error
}
因为如果一个类扩展了一个抽象类,那么它必须重写抽象方法,这是强制性的。由于静态方法是在编译时解析的类方法,而覆盖方法是在运行时解析的实例方法,并遵循动态多态性。
有一种情况是静态和抽象可以一起使用,那就是当这两个修饰符都放在嵌套类的前面时。
您可以使用Java 8中的接口来实现这一点。
这是关于它的官方文件:
https://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html
因为abstract是应用于abstract方法上的关键字,所以abstract方法不指定主体。而静态关键字则属于类区域。