can*_*ner 31 java methods abstract
我想写一个抽象方法,但编译器持续给出了这个错误:
抽象方法不能有一个体
我有这样的方法:
public abstract boolean isChanged() {
return smt else...
}
Run Code Online (Sandbox Code Playgroud)
这有什么不对?
Rev*_*nzo 76
抽象方法意味着它没有默认实现,实现类将提供详细信息.
基本上,你会有
abstract class AbstractObject {
public abstract void method();
}
class ImplementingObject extends AbstractObject {
public void method() {
doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
所以,它正如错误所述:你的抽象方法不能有一个正文.
有关Oracle网站的完整教程:http://download.oracle.com/javase/tutorial/java/IandI/abstract.html
你会做这样的事情的原因是,多个对象可以共享某些行为,但不是所有行为.
一个非常简单的例子是形状:
你可以拥有一个通用的图形对象,它知道如何重新定位自己,但实现类实际上会自己绘制.
(这取自我上面链接的网站)
abstract class GraphicObject {
int x, y;
...
void moveTo(int newX, int newY) {
...
}
abstract void draw();
abstract void resize();
}
class Circle extends GraphicObject {
void draw() {
...
}
void resize() {
...
}
}
class Rectangle extends GraphicObject {
void draw() {
...
}
void resize() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
Edw*_*uck 21
如果使用java关键字abstract,则无法提供实现.
有时这个想法来自于拥有C++背景,并将C++中的virtual关键字误认为与abstractJava中的关键字"几乎相同" .
在C++中virtual表明可以覆盖一个方法,并且将遵循多态,但abstract在Java中并不是一回事.在Java abstract中更像是一个pure virtual方法,或者必须由子类提供实现的方法.由于Java支持多态而不需要声明它,因此所有方法都是virtual从C++的角度出发的.因此,如果要提供可能被覆盖的方法,只需将其写为"普通"方法即可.
现在为了保护方法不被覆盖,Java使用final与方法声明协调的关键字来指示子类不能覆盖该方法.