interface & abstract class 为什么不能包含static 方法!
2014-09-12 17:02
246 查看
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;
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;
相关文章推荐
- interface & abstract class 为什么不能包含static 方法!
- java中interface中的方法为什么不能是static方法?
- java中interface中的方法为什么不能是static方法?
- spring注入时bean的set方法为什么不能是static类型?
- spring注入时bean的set方法为什么不能是static类型的?(为什么要用单例模式而不是静态方法)
- Java基础问题:static方法中为什么不能使用非static的方法或变量
- 抽象方法为什么不能是static或native或synchronized
- static方法可以直接从普通方法(regular method)中调用,但是普通方法不能直接从static方法中调用,为什么?
- [C#]为什么Interface里的成员不能使用static修饰?
- 为什么this super不能用在static方法中??
- Interface和abstract类不能含有Static方法
- java中静态(static)的方法为什么不能重写(override)
- 知识补充:抽象方法abstract为什么不能与static、synchronized、native混用
- 关于this和super关键字为什么不能再static方法中或者静态代码块中
- 为什么静态成员、静态方法(static)中不能用this和super关键字
- spring注入时bean的set方法为什么不能是static类型的?
- 知识补充:抽象方法abstract为什么不能与static、synchronized、native混用
- vs2005 "automation服务器不能创建对象"解决方法. -- 安装好VS2005 SP1为什么还是不能创建WEB文件
- AbStract 和Interface 方法是否能用Static修饰,为什么?
- 抽象方法为什么不能是static或native或synchronized