簡體   English   中英

在Java中擴展靜態類是什么意思?

[英]What does it mean to extend a static class in Java?

看一下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#背景,其中靜態類不能從另一個類繼承,我對Map類之后的extends關鍵字有點困惑。 擴展靜態類是什么意思,它提供了什么優勢?

靜態修飾符在應用於類時,意味着c#和java中有兩個非常不同的東西。 在c#中,類上的static修飾符強制使該類的所有成員都是靜態的 因此,在c#中:

  • 擴展靜態類是沒有意義的,所以它是不允許的
  • static修飾符可用於任何類,而不僅僅是嵌套類。

但是,在java中,應用於類的靜態修飾符意味着該類是嵌套它的類的靜態成員 ,而不是它的成員必須是靜態的。 因此,在java中:

  • 允許擴展靜態類,因為其成員不一定是靜態的
  • static修飾符只能用於嵌套類,因為它只能用於類成員(並且只有嵌套類可以是類成員)。

在Java中沒有靜態類(不像在C#中那樣)。 這是一個內部嵌套類,靜態屬性意味着它可以在沒有外部類的實例的情況下使用。

例子

靜態嵌套類可以像這樣實例化:

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

但是,需要創建與外部實例相關的非靜態內部類:

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

嵌套類的Java文檔中獲取的代碼。

在此上下文中,static表示Map類不需要實例化WordCount實例。

它與可繼承無關(盡管是最終的關鍵字)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM