interface & abstract class & static 方法

原创 2007年10月04日 21:46:00

问题 

高手请教 interface & abstract class 为什么不能包含static 方法!

sun这么做的动机是什么?
好像大名鼎鼎的 thinking in java中也没有解释!!

回答:

好久abstract class A {
static void doSomething() ;
}
不能通过编译是因为你没有定义doSomething 的方法体,比如该语句最后你加上{},就可以了用了.这时候doSomething 是A的一个类方法.
如果你想把它定义为一个抽象方法那么你必须定义它的时候使用关键字abstract.如果你想定义一个方法同时使用关键字abstract 和static 这是办不到的.你想想,static 方法是类方法,它是不允许子类覆写(override)的(所以必须在定义的时候给出实现),而abstract方法,是只有特征标,没有实现的方法,是必须由子类来覆写的,两者是水火不相容的,sun当然不会允许定义一个同时为abstract 和static 的方法。

至于接口和抽象类还有点不同,因为它是纯粹的设计,不涉及任何的实现,它所有的方法都是共有和抽象的(关键字public和abstract可以省略)所以接口不能有static方法(类方法),上面提到的static void doSomething(){};在抽象类中可以存在,但是在接口中是不允许的。

顺便提以下,在接口中可以定义staic的属性的。实际上接口中定义的属性必须是static,final和public的(因为是必须的,所以这3个关键字也都是可以省略的)

原则一:static永远不能和abstract碰头;
原则二:interface是更抽象的抽象类,接口的所有方法都未实现,接口的方法默认为public abstract ,根据原则一,当然不能是static了;
原则三:抽象类是部分实现的,其中non-abstract方法可以带static,abstract方法不能带static;

java接口(interface)与抽象类(abstract class)的区别

很久没有看到如此精辟的文章了!作者写得实在太好了!正在学JAVA或者想了解抽象类与接口的朋友,绝对不可错过!本人极力推荐! OOP中接口与抽象类的区别 Java语言接口与继承的本质 深入理解接口...
  • zgrjkflmkyc
  • zgrjkflmkyc
  • 2013年09月30日 21:08
  • 5863

interface和abstract 的区别和相同点

在Java语言中,abstract class和interface是支持抽象类定义的两种机制。 不能创建abstract类的实例,然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实...
  • Mandypan
  • Mandypan
  • 2016年08月06日 19:30
  • 5713

抽象类(abstract class)和接口(Interface)的区别

前言 抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予了Java强大的面向对象能力。二者具有很大的相似性,甚至可以相互替换,因...
  • aptentity
  • aptentity
  • 2017年04月01日 11:53
  • 1219

抽象类(abstract class)与接口(interface)的异同

抽象类:包含抽象方法的类就是抽象类 接口:指抽象方法的集合,方法不包含方法体相同点: 都不能被实例化 接口的实现类或者抽象类的子类都必须实现了接口或抽象类中的方法后才可以被实例化 不同点: 接口只有...
  • aym_fuhong
  • aym_fuhong
  • 2016年09月05日 20:07
  • 1720

c#中abstract与class的区别

http://blog.163.com/shirx2005@126/blog/static/8176490620091024102254107/
  • conganguo
  • conganguo
  • 2014年10月05日 21:01
  • 877

Java之抽象(abstract)类、接口(interface)的用法总结

导读: 1、什么是抽象类(abstract)? 2、如何定义抽象类(abstract)? 3、抽象类(abstract)的作用? 4、何为接口?接口和类的区别? 5、怎么区分抽象类和接口? ...
  • dtjiawenwang88
  • dtjiawenwang88
  • 2017年06月14日 20:26
  • 531

JAVA基础再回首(七)——final关键字、抽象类abstract、接口interface、权限修饰符、导包

JAVA基础再回首(七)——final关键字、抽象类abstract、接口interface、权限修饰符、导包 没有到不了的明天。 嬉皮笑脸面对人生的难。 相信自己,不然你什么都做不了...
  • m366917
  • m366917
  • 2016年08月03日 21:04
  • 1888

简述static,final,abstract三者的使用场景与注意事项

简述static,final,abstract三者的使用场景与注意事项
  • qq_21806621
  • qq_21806621
  • 2017年03月14日 22:14
  • 1194

通过案例理解Abstract类和interface类

IBM上的一篇文章 看了之后深受启发。         看上面一篇可以理解的就好了,我这里是按照自己的理解,啰嗦的进行一下表述。           如果是偶尔阅读到这里,这个不算,我们假设你是主动搜...
  • shareye1992
  • shareye1992
  • 2016年07月07日 17:22
  • 762

java中抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰

java中抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰...
  • u010575093
  • u010575093
  • 2016年02月24日 20:37
  • 5410
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:interface & abstract class & static 方法
举报原因:
原因补充:

(最多只允许输入30个字)