Java 菜鳥教程

Java 流程控制

Java 數組

Java 面向對象(I)

Java 面向對象(II)

Java 面向對象(III)

Java 異常處理

Java 列表(List)

Java Queue(隊列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java 嵌套靜態(tài)類

在本教程中,您將借助示例學習嵌套的靜態(tài)類。您還將了解靜態(tài)類與內部類之間的區(qū)別。

如之前的教程所述,我們可以在Java的另一個類中擁有一個類。這樣的類稱為嵌套類。在Java中,嵌套類有兩種類型:

  • 嵌套的非靜態(tài)類(內部類)

  • 嵌套的靜態(tài)類。

在上一教程中,我們已經討論了內部類。如果您想了解內部類,請訪問Java嵌套類。

在本教程中,我們將學習嵌套靜態(tài)類。

Java嵌套靜態(tài)類

我們使用關鍵字static使我們的嵌套類靜態(tài)化。

注意:在Java中,僅允許嵌套類為靜態(tài)。

與常規(guī)類一樣,靜態(tài)嵌套類可以同時包含靜態(tài)和非靜態(tài)字段和方法。例如,

Class Animal {
   static class Mammal {
      // Mammal類的靜態(tài)和靜態(tài)成員
   }
   // Animal類的成員
}

靜態(tài)嵌套類與外部類相關聯。

要訪問靜態(tài)嵌套類,我們不需要外部類的對象。

示例:靜態(tài)嵌套類

class Animal {

  //內部類
   class Reptile {
      public void displayInfo() {
        System.out.println("I am a reptile.");
      }
   }

  //靜態(tài)類
   static class Mammal {
      public void displayInfo() {
        System.out.println("I am a mammal.");
      }
   }
}

class Main {
   public static void main(String[] args) {
      //創(chuàng)建外部類的對象
      Animal animal = new Animal();

      //非靜態(tài)類的對象創(chuàng)建
      Animal.Reptile reptile = animal.new Reptile();
      reptile.displayInfo();

      //靜態(tài)嵌套類的對象創(chuàng)建
      Animal.Mammal mammal = new Animal.Mammal();
      mammal.displayInfo();

   }
}

輸出結果

I am a reptile.
I am a mammal.

在上面的程序中,我們在Animal類中有兩個嵌套的Mammal和Reptile類。

為了創(chuàng)建非靜態(tài)類Reptile的對象,我們使用了

Animal.Reptile reptile = animal.new Reptile()

為了創(chuàng)建靜態(tài)類Mammal的對象,我們使用了

Animal.Mammal mammal = new Animal.Mammal()

訪問外部類的成員

在Java中,靜態(tài)嵌套類與外部類相關聯。這就是為什么靜態(tài)嵌套類只能訪問外部類的類成員(靜態(tài)字段和方法)的原因。

讓我們看看如果嘗試訪問外部類的非靜態(tài)字段和方法會發(fā)生什么。

示例:訪問非靜態(tài)成員

class Animal {
  static class Mammal {
   public void displayInfo() {
     System.out.println("I am a mammal.");
   }
 }

 class Reptile {
   public void displayInfo() {
     System.out.println("I am a reptile.");
   }
 }

 public void eat() {
   System.out.println("I eat food.");
 }
}

class Main {
 public static void main(String[] args) {
   Animal animal = new Animal();
   Animal.Reptile reptile = animal.new Reptile();
   reptile.displayInfo();

   Animal.Mammal mammal = new Animal.Mammal();
   mammal.displayInfo();
   mammal.eat();
 }
}

輸出結果

Main.java:28: error: cannot find symbol
    mammal.eat();
          ^
  symbol:   method eat()
  location: variable mammal of type Mammal
1 error
compiler exit status 1

在上面的示例中,我們在Animal類中創(chuàng)建了一個非靜態(tài)方法eat()。

現在,如果我們嘗試使用對象mammal訪問eat(),則編譯器將顯示錯誤。
這是因為mammal是靜態(tài)類的對象,因此我們無法從靜態(tài)類訪問非靜態(tài)方法。

靜態(tài)頂級類

如上所述,只有嵌套類可以是靜態(tài)的。我們不能有靜態(tài)的頂級類。

讓我們看看如果嘗試使頂級類靜態(tài)化會發(fā)生什么。

static class Animal {
 public static void displayInfo() {
   System.out.println("I am an animal");
 }
}

class Main {
 public static void main(String[] args) {
   Animal.displayInfo();
 }
}

輸出結果

Main.java:1: error: modifier static not allowed here
static class Animal {
       ^
1 error
compiler exit status 1

在上面的示例中,我們嘗試創(chuàng)建一個靜態(tài)類Animal。由于Java不允許使用靜態(tài)頂級類,因此會出現錯誤。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清