java - 在 Java 中扩展静态类是什么意思?

标签 java inheritance static

在网上查看一些 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# 背景,其中静态类不能从另一个类继承,我对 Map 类之后的 extends 关键字有点困惑。扩展静态类是什么意思,它提供了哪些优势?

最佳答案

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

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

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

  • 允许扩展静态类,因为它的成员不一定是静态的
  • static 修饰符只能用在嵌套类上,因为它只能用在类成员上(而且只有嵌套类才能成为类成员)。

关于java - 在 Java 中扩展静态类是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16795374/

相关文章:

java - Spring Java - 运行进程每天执行一次任务

java - spring rest 处理空请求体(400 Bad Request)

java - 从表中选择所有类型的实体,但仅限于派生实体的成员

c++ - 获取抽象基类的缺失成员

c++ - 在指针c++中如何使用继承类的实际功能

c++ - 为什么 "static"关键字在 C 和 C++ 中有这么多含义?

java - 对象引用 - 为什么引用了错误的对象?

java - 使用 Lambda 代理集成通过 API Gateway 从 AWS Lambda 抛出错误

c# - 如何在静态类中调用类

groovy - Groovy 静态编译是否有全局标志?