Java中的抽象方法
我想编写一个抽象方法,但编译器始终给出以下错误: 抽象方法不能有主体 我有这样一种方法:Java中的抽象方法,java,methods,abstract,Java,Methods,Abstract,我想编写一个抽象方法,但编译器始终给出以下错误: 抽象方法不能有主体 我有这样一种方法: public abstract boolean isChanged() { return smt else... } 这里出了什么问题?抽象方法意味着它没有默认的实现,实现类将提供详细信息 基本上,你会 abstract class AbstractObject { public abstract void method(); } class ImplementingObject exte
public abstract boolean isChanged() {
return smt else...
}
这里出了什么问题?抽象方法意味着它没有默认的实现,实现类将提供详细信息 基本上,你会
abstract class AbstractObject {
public abstract void method();
}
class ImplementingObject extends AbstractObject {
public void method() {
doSomething();
}
}
因此,这正是错误所说的:抽象方法不能有主体
Oracle网站上有完整的教程,网址为:
这样做的原因是如果多个对象可以共享某些行为,但不是所有行为
一个非常简单的例子是形状:
您可以有一个通用图形对象,它知道如何重新定位自身,但实现类实际上会自己绘制
(这是从我上面链接的站点中获取的)
错误消息告诉了确切的原因:“抽象方法不能有主体” 它们只能在抽象类和接口中定义(接口方法是隐式抽象的!),其思想是,子类实现该方法 例如:
public abstract class AbstractGreeter {
public abstract String getHelloMessage();
public void sayHello() {
System.out.println(getHelloMessage());
}
}
如果使用java关键字
abstract
,则无法提供实现
有时候这个想法来自C++背景,在C++中错误地把代码>虚拟关键字作为与java中的纯虚拟的
方法,或者一个必须由子类提供实现的方法。由于java支持多态性而不需要声明它,所以C++的所有方法都是<代码>虚拟<代码>。因此,如果您想提供一个可能被重写的方法,只需将其作为“普通”方法编写即可
现在,为了防止方法被重写,Java使用关键字
final
与方法声明相协调,以指示子类不能重写该方法。编译器会准确地告诉您错误所在。它是持久的,因为您试图编译无效代码。出于兴趣,如果你给一个方法提供了一个主体,你认为如何使它抽象?通过声明方法abstract
,你想实现什么?@jon@ted,我有一个抽象类,我想在这个类中编写一个抽象方法。好的。在Java中,抽象方法永远不能有一个C++的透视图,就像是<代码>公有:虚拟BoL ISchange()= 0 {返回SMT…} /java >,这是合法的。代码>摘要类似于=0
位。很好地解释了为什么他可能会感到困惑,
public abstract class AbstractGreeter {
public abstract String getHelloMessage();
public void sayHello() {
System.out.println(getHelloMessage());
}
}
public class FrenchGreeter extends AbstractGreeter{
// we must implement the abstract method
@Override
public String getHelloMessage() {
return "bonjour";
}
}