Java 中的抽象方法
我想写一个抽象的方法,但编译器持续给出这个错误:
抽象方法不能有主体
我有一个这样的方法:
public abstract boolean isChanged() {
return smt else...
}
这是怎么回事?
我想写一个抽象的方法,但编译器持续给出这个错误:
抽象方法不能有主体
我有一个这样的方法:
public abstract boolean isChanged() {
return smt else...
}
这是怎么回事?
抽象方法意味着它没有默认的实现,实现类将提供详细信息。
从本质上讲,你会有
abstract class AbstractObject {
public abstract void method();
}
class ImplementingObject extends AbstractObject {
public void method() {
doSomething();
}
}
因此,这与错误所述完全相同:您的抽象方法不能具有主体。
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() {
...
}
}
如果使用 java 关键字,则无法提供实现。abstract
有时,这个想法来自于C++的背景,并将C++中的关键字误认为与Java中的关键字“几乎相同”。virtual
abstract
在C++表示可以重写方法,并且多态性将随之而来,但在Java中不是一回事。在Java中,它更像是一个方法,或者说实现必须由子类提供。由于Java支持多态性而无需声明它,因此所有方法都来自C++的角度。因此,如果要提供可能被覆盖的方法,只需将其编写为“正常”方法即可。virtual
abstract
abstract
pure virtual
virtual
现在,为了防止方法被重写,Java 使用关键字与方法声明协调,以指示子类不能重写该方法。final