在Java中扩展静态类意味着什么?

2022-09-02 23:03:15

在 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#背景,静态类不能从另一个类继承,我对类后面的关键字有点困惑。扩展静态类意味着什么,它提供了哪些优势?extendsMap


答案 1

静态修饰符在应用于类时,在 c# 和 java 中意味着两种截然不同的东西。在 c# 中,类上的静态修饰符强制使该类的所有成员都是静态的。因此,在 c# 中:

  • 扩展静态类没有意义,因此不允许
  • 静态修饰符可用于任何类,而不仅仅是嵌套类。

但是,在 java 中,应用于类的静态修饰符意味着该类是它所嵌套的类的静态成员,而不是其成员必须是静态的。因此,在java中:

  • 允许扩展静态类,因为其成员不一定是静态的
  • 静态修饰符只能用于嵌套类,因为它只能用于类成员(并且只有嵌套类可以是类成员)。

答案 2

Java中没有静态类这样的东西(与C#中的方式不同)。这里是一个内部嵌套类,静态属性意味着它可以在没有外部类实例的情况下使用。

例子

静态嵌套类可以像这样实例化:

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();

但是,需要创建一个与外部类的实例相关的非静态内部类:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

Java 文档中获取有关嵌套类的代码。


推荐