黑马程序员技术交流社区

标题: 为什么抽象方法不能写成静态的 [打印本页]

作者: lindegen    时间: 2014-6-20 14:36
标题: 为什么抽象方法不能写成静态的
本帖最后由 lindegen 于 2014-6-23 17:47 编辑

如题,求大神解惑 举个栗子什么的最喜欢了:loveliness:
作者: 西门吹风    时间: 2014-6-20 14:53
静态方法主要主为了便于调用,可以不过创建实例对象而通过类来访问
抽象方法没有方法体,直接通过类去调用没有意义
作者: xp8812    时间: 2014-6-20 14:57
一个方法体没内容的方法定义成静态没有意义
作者: lindegen    时间: 2014-6-20 14:58
西门吹风 发表于 2014-6-20 14:53
静态方法主要主为了便于调用,可以不过创建实例对象而通过类来访问
抽象方法没有方法体,直接通过类去调用 ...

除了没有意义之外呢,编译的时候会出错哇
作者: 谭荣强    时间: 2014-6-20 15:02
抽象主要为了子类复写,静态与子类无关.
作者: 崔湖尧    时间: 2014-6-20 15:06
1. 抽象方法不能实现
2.static方法独立于任何实例,因此static方法必须被实现

所以抽象方法不能定义成static
作者: 姿_`态    时间: 2014-6-20 16:59
就好像接口中的方法,默认是 public abstract 修饰的。抽象类,默认是被 abstract 修饰的 ,前面的权限修饰可以自己定义。所以就不要再想着 在他前面加写别的东西了,都是没有意义的,要不然也不会那样规定。
作者: iWilliam    时间: 2014-6-20 18:28
简单分析一哈就知道,这个逻辑上就是矛盾的
抽象方法没有具体实现,只是抽象出来作为一个方法放在那里,而运行时会根据子类的不同,实际调用的是子类的方法,这里主要是用到了多态,为的是方便将来维护。
凡是用static修饰的都属于类本身,应该由类来调用,当然在Java中实例也可以调用,对于这一点,其实很多人认为是不妥的,IDE也会给一个警告,告诉你应该用类来调用。
那么问题来了:
假如抽象方法是可以用static修饰的,直接用类来调用了,运行时肯定不走子类了,这样失去了多态的意义,无法进行维护扩展的,再说了,连方法体都木有,怎么执行呢,所以,从语言设计者的角度来看,这种思路就是不通的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2