WebのいくつかのJavaサンプルコードを見ると、次の構文に出くわしました。
public class WordCount {
public static class Map extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text Word = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
//...
}
}
//...
}
静的クラスが別のクラスから継承できないC#のバックグラウンドから来たので、extends
クラスの後のMap
キーワードについて少し混乱しました。静的クラスを拡張することはどういう意味ですか、そしてそれはどのような利点を提供しますか?
Java(C#と同じ方法ではありません)には静的クラスのようなものはありません。これは 内側 ネストされたクラスと静的属性は、外部クラスのインスタンスがなくても使用できることを意味します。
静的にネストされたクラスは、次のようにインスタンス化できます。
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
ただし、非静的内部クラスは、外部クラスのインスタンスに関連して作成する必要があります。
OuterClass.InnerClass innerObject = outerObject.new InnerClass();
ネストされたクラスに関するJavaドキュメント から取得したコード。
静的修飾子は、クラスに適用されると、c#とJavaで2つの非常に異なることを意味します。 C#では、クラスの静的修飾子そのクラスのすべてのメンバーを静的にすることを強制します。したがって、c#では:
ただし、Javaでは、クラスに適用される静的修飾子は、そのメンバーが静的である必要はなく、ネストされているクラスのクラスは静的メンバーであることを意味します。したがって、Javaでは:
このコンテキストでは、静的とは、Mapクラスがインスタンス化されるためにWordCountのインスタンスを必要としないことを意味します。
継承可能であることとは何の関係もありません(ただし、finalはそれを行うキーワードです)