7

我正在阅读 katherine sierra 的 SCJP。
我知道抽象和最终关键字不能一起使用,因为它们相互矛盾,如书中所述。

但是,我不明白为什么 strictfp 和 abstract 关键字不能一起使用。
我还不知道 strictfp 关键字在 Java 中究竟是如何工作的。

在我看来,可以声明一个抽象的 strictfp 方法,拥有一个子类,并以“strictfp 方式”实现该方法。

这些关键字不能很好相处的原因是什么?
编辑
我已经仔细检查了这本书,它肯定说

因为接口方法是抽象的,它们不能被标记为 final、strictfp 或 native。

来自 Katherine Sierra 的 SCJP。第 21 页。

我的 IDE(Eclipse Juno)也说我不能同时使用 abstract 和 strictfp 关键字。
嗯,为什么不呢?

4

2 回答 2

8

Katherine Sierra 可能在谈论抽象方法。创建一个抽象方法是没有意义的,strictfp因为抽象方法只是提供了一个方法签名(如果有的话,还有 throws 子句),要使用它,我们需要在子类中用具体方法覆盖它,并且这个方法将有自己的修饰符这将覆盖其父方法的修饰符。也就是说,方法不继承修饰符。

请注意,它不仅是,而且除了andsctriptfp之外的抽象方法上不允许有修饰符。如果你尝试,你会得到一个编译时错误。publicprotected

于 2013-05-09T02:04:33.723 回答
3

希望您现在已经得到答案,如果没有,那么它可能对您有用。

我在论坛中遇到过类似的问题。

abstractstrictfp不能放在方法声明中的原因是因为说abstract该方法不能由当前类实现,它必须由具体的子类实现,并且strictfp说该方法应该由使用的类strictfp。所以在这种情况下,两个关键字相互矛盾,因此在方法声明中不允许两者一起使用。

但是在上课前使用abstract和绝对合法。strictfp就像是

public abstract strictfp class MyAbstractClass{}      //is ok

如果您在抽象类中声明 strictfp,则默认情况下其所有方法都将是 strictfp。记住类中的所有具体方法,而不是抽象方法。

运行下面给出的示例并查看 OP:

import java.lang.reflect.*;
public abstract strictfp class AbstractStrictfp 
{
     public   abstract void abstractMethod();
     public   void concreteMethod(){};

     public static void main(String args[]){
          Method methods[] = AbstractStrictfp.class.getMethods();
          for(Method method : methods){
              System.out.println("Method Name::"+method.getName());
                     System.out.println("Modifiers::"+Modifier.toString(method.getModifiers()));
              System.out.println();

          }
     }
}
于 2015-07-24T10:35:05.443 回答