2017-08-10 14 views

答えて

3

Stringクラスがfinalで同じクラス階層に存在しないクラスで行われている - それができることを意味しています」サブクラス化される。また、Runnableを実装していません。このすべてはコンパイル時に認識されています。したがって、コンパイルエラー。

+2

その他の点: 'String'は' Runnable'を実装しておらず、( 'final'なので)*サブクラス*を持つことはできません。 –

+0

@ T.J.Crowderはい+1これは答えに編集して、より役に立つようにするのが良いでしょう。 –

+0

@ErwinBolwidt:はい。私はモーリスにそれを残していた。しかし、すべてのことは、とにかく愚か者です、そう... –

1

例:

static class First { 

} 

static final class Second { 

} 

そしてより:

Runnable r = new Thread(); 

    System.out.println(r instanceof First); 

    System.out.println(r instanceof Second); 

コンパイラはSecondは、このように、それはこのように、それはRunnableを実装することはできません、どんなsub-classesを持つことができない、finalであることを見ています。

0

Stringクラスはfinalであり、Runnableインターフェイスを実装していません。したがって、r instanceof Stringは、Stringのサブクラス(Runnableを実装することはできないため)を返すことはできません。そのため、コンパイラはそれを許可しません。一方

、そうr instanceof Vectorr instanceof FileNotFoundExceptionは限りコンパイラが言うことができるようにtrueを返すことがあり、VectorクラスのサブクラスまたはRunnableインタフェースを実装するクラスFileNotFoundExceptionがあるかもしれません。

これはJLS 15.20.2で覆われている:コンパイル時にエラーが、その後のinstanceof関係式は、同様に、コンパイル時に生成としてのReferenceTypeへの関係式のキャスト(§15.16)が拒否される場合

エラー。 このような状況では、instanceof式の結果はtrueになることはありません