2016-09-12 22 views
1

レガシーアプリケーションのコードでは、内部クラスを含むクラスファイルが見つかりましたが、内部クラスはクラス本体内で定義されていませんが、クラス定義の閉じ括弧の後にあります。クラスファイルの内部クラスですが、クラス本体にはありませんか?

それはsilikeこの見えた:明らかに、コンパイラは文句はありませんが、私は前にこのような何かを見たことがないように私はかなりイライラした

MyClass.java

public class MyClass { 

    // class body 

} 

class DataStructure1 { 

    String field1; 

    Integer field2; 

} 

class DataStructure2 { 

    Date field3; 

    String field4; 

} 

を。

  • 内部クラスですか?
  • 字下げを除いて、本文内に定義されたクラスに違いはありますか?
+0

[仕様の読み取り](https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.1.3):「内部クラスはネストされたクラスです明示的または暗黙的に静的に宣言されていません "、および"ネストされたクラスは、宣言が別のクラスまたはインタフェースの本体内で発生するすべてのクラスです。彼らは別のクラスの体の中にいないので、彼らは内部のクラスではありません。 –

+0

探しているものが分かっていれば、何かを読むのはいつも簡単です。 ;-)リンクをありがとう。 –

+0

内部クラスが存在する前に、パッケージローカルクラスがありました。これはJava 1.0から入手できました。 –

答えて

3

これは私が知る限り、内部クラスではなく、同じソースファイル内にある2つの他のパッケージプライベートクラスです。与えられた.javaファイルに複数のクラス定義を持つことは完全に容認されます。

内部クラスは、名前が示すように、内に定義する必要があります。 aは外部クラスを含みます。それはここでは当てはまりません。

+1

すでに重複している質問にどのように回答を追加しましたか? – Codebender

+0

@コードベンダー華麗な質問。 Andyは私が投稿した前に重複をマークしたと思うが、実際には重複していると書いていた。だから、あなたが答えを出している限り、SOエンジンは答えを得ることができると思われます。 –

+0

@TimBiegeleisenは私が読んだ振る舞いですが、質問があればボタンがグレー表示になっています私が書くことを始めても、重複してマークされています。 –

関連する問題