为什么静态方法(static)不能同时声明为抽象(abstract)方法?

时间:2022-04-19 19:30:20
书上说abstract修饰符只能用于普通方法,不能用于静态方法和构造器。不能用于构造器还可以理解,毕竟构造器是用来构造实例的,如果用abstract来修饰就是自相矛盾了。可是为什么静态方法也不能用abstract来修饰呢?

9 个解决方案

#1


static不用实例化可直接调用
abstract要继承实现才可,冲突

#2


2个 关键字 的机制 明显不同啊。

#3


访问静态方法之考虑他的编译时类型,因此没有多态,不能被重写,故不能和abstract一起使用

#4


你要调用一个别的类中的方法,就2种方式,如果这个是静态方法,直接类名.方法名()调用,如果不是静态方法,就得先生成这个类的实例,再通过实例名.方法名()调用(当然,前提是public的,其它关键字要考虑是否在包中或者是否子类等等,pirvate肯定是不行的),另一方面,一个类如果包含一个抽象方法,这必然是个抽象类,而抽象类是不能实例化的,它必须通过被继承来实现其中的抽象方法

#5


因为要动态加载

#6


试想一下abstract方法是不需要实例化,给子类继承后子类一定要实现的方法,而static是不用实例化就能
是能直接调用了,两者已经有冲突了

#7


abstract为抽象。
static为静态。

  抽象是多态的一种体现,可以有子类来实现它。

  静态不能实例化,故不能被子类引用。


   你把一个类定义为abstract就是为了达到多态这个目的,如果abstract与static一起用的话,JVM则无法编译你要做什么。所以他们俩不能一起使用。

#8


JVM在编译时,凡是类种有用到static的地方,它都会以JVM特定机制执行。比如在main方法(程序入口)中,就必须定义为static,JvM对static是有特定机制的。

#9


abstract为抽象,
  就是不知道他怎么实现.  你又加个static那不有点~!~!~!~!~!~

#1


static不用实例化可直接调用
abstract要继承实现才可,冲突

#2


2个 关键字 的机制 明显不同啊。

#3


访问静态方法之考虑他的编译时类型,因此没有多态,不能被重写,故不能和abstract一起使用

#4


你要调用一个别的类中的方法,就2种方式,如果这个是静态方法,直接类名.方法名()调用,如果不是静态方法,就得先生成这个类的实例,再通过实例名.方法名()调用(当然,前提是public的,其它关键字要考虑是否在包中或者是否子类等等,pirvate肯定是不行的),另一方面,一个类如果包含一个抽象方法,这必然是个抽象类,而抽象类是不能实例化的,它必须通过被继承来实现其中的抽象方法

#5


因为要动态加载

#6


试想一下abstract方法是不需要实例化,给子类继承后子类一定要实现的方法,而static是不用实例化就能
是能直接调用了,两者已经有冲突了

#7


abstract为抽象。
static为静态。

  抽象是多态的一种体现,可以有子类来实现它。

  静态不能实例化,故不能被子类引用。


   你把一个类定义为abstract就是为了达到多态这个目的,如果abstract与static一起用的话,JVM则无法编译你要做什么。所以他们俩不能一起使用。

#8


JVM在编译时,凡是类种有用到static的地方,它都会以JVM特定机制执行。比如在main方法(程序入口)中,就必须定义为static,JvM对static是有特定机制的。

#9


abstract为抽象,
  就是不知道他怎么实现.  你又加个static那不有点~!~!~!~!~!~