15

我最近遇到了以下方法。我尝试使用谷歌搜索并通过定义如下方法来查看差异;两者似乎都是一样的。但是,我需要知道它是否真的一样?

public abstract void methodName();
abstract public void methodName();

注: publicabstract已在上述两种方法中互换。

4

6 回答 6

22

就功能而言没有区别,但无论您选择哪种方式,最好保持一致。

话虽如此,我以前几乎从未见过abstract public使用过的。因此,从编码标准的角度来看,public abstract可能会更容易被更多人识别。

于 2012-12-04T17:11:47.137 回答
11

一样的。不用担心。两个类似的abstract方法声明。

于 2012-12-04T17:08:47.757 回答
4

两者都是修饰符,您可以按任何顺序使用

于 2012-12-04T17:10:42.713 回答
2
public abstract void methodName();
abstract public void methodName();

这两种方法是相同的,类似的例子是

public static void main(String args[]);
static public void main(String args[]);

因此以上两个是相同的。这只是我们想要如何写的愿望。

于 2012-12-04T17:38:15.170 回答
1

James Gosling 等人的“Java 语言规范,第三版”一书。人。第 8.4.3 节“方法修饰符”(第 214 页)中的状态:“如果两个或多个方法修饰符出现在方法声明中,尽管不是必需的,但习惯上它们的出现顺序与上面在产生式中显示的顺序一致用于方法修饰符。”

生产是:

MethodModifier:其中之一:Annotation public protected private abstract static final synchronized native strictfp。

因此:是的,形式上,顺序无关紧要,但 Java 发明者自己更喜欢“公共抽象”。

于 2021-07-21T17:01:26.863 回答
1

两个代码是相同的,如果您反编译代码,编译器会将其转换为相同的字节码。然而,通常的做法(不是经验法则)以访问说明符而不是其他关键字开始代码。

public abstract void methodName();
abstract public void methodName();

编译器将这两种方法都转换为下面的代码

public abstract void methodName();
于 2020-10-05T06:16:28.513 回答