Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java geneste statische klasse

Java geneste statische klasse

In deze zelfstudie leert u met behulp van voorbeelden over geneste statische klassen. Je leert ook hoe statische lessen verschillen van innerlijke lessen.

Zoals geleerd in eerdere tutorials, kunnen we een klasse binnen een andere klasse in Java hebben. Dergelijke klassen worden geneste klassen genoemd. In Java zijn er twee typen geneste klassen:

  • Geneste niet-statische klasse (Innerlijke klasse)
  • Geneste statische klasse.

We hebben innerlijke klassen al besproken in de vorige tutorial. Bezoek Java Nested Class als je meer wilt weten over innerlijke klassen.

In deze zelfstudie leren we over geneste statische klassen.


Java geneste statische klasse

We gebruiken het trefwoord static om onze geneste klasse statisch te maken.

Opmerking: In Java mogen alleen geneste klassen statisch zijn.

Net als reguliere klassen kunnen statische geneste klassen zowel statische als niet-statische velden en methoden bevatten. Bijvoorbeeld,

Class Animal {
   static class Mammal {
      // static and non-static members of Mammal
   }
   // members of Animal
} 

Statisch geneste klassen zijn gekoppeld aan de buitenste klasse.

Om toegang te krijgen tot de statische geneste klasse, hebben we geen objecten van de buitenste klasse nodig.


Voorbeeld:statische geneste klasse

class Animal {

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

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

class Main {
   public static void main(String[] args) {
      // object creation of the outer class
      Animal animal = new Animal();

      // object creation of the non-static class
      Animal.Reptile reptile = animal.new Reptile();
      reptile.displayInfo();

      // object creation of the static nested class
      Animal.Mammal mammal = new Animal.Mammal();
      mammal.displayInfo();

   }
}

Uitvoer

I am a reptile.
I am a mammal.

In het bovenstaande programma hebben we twee geneste klassen Zoogdier en Reptiel binnen een klasse Animal .

Om een ​​object van de niet-statische klasse Reptile te maken, hebben we

Animal.Reptile reptile = animal.new Reptile()

Een object maken van de statische klasse Zoogdier , we hebben gebruikt

Animal.Mammal mammal = new Animal.Mammal()

Toegang tot leden van Outer Class

In Java worden statische geneste klassen geassocieerd met de buitenste klasse. Dit is de reden waarom statische geneste klassen alleen toegang hebben tot de klassenleden (statische velden en methoden) van de buitenste klasse.

Laten we eens kijken wat er zal gebeuren als we proberen toegang te krijgen tot niet-statische velden en methoden van de buitenste klasse.

Voorbeeld:toegang tot niet-statische leden

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();
 }
}

Uitvoer

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

In het bovenstaande voorbeeld hebben we een niet-statische methode gemaakt eat() binnen de klas Dier .

Als we nu proberen toegang te krijgen tot eat() met behulp van het object zoogdier , de compiler geeft een fout weer.

Het is omdat zoogdier is een object van een statische klasse en we hebben geen toegang tot niet-statische methoden van statische klassen.


Statische klasse op het hoogste niveau

Zoals hierboven vermeld, kunnen alleen geneste klassen statisch zijn. We kunnen geen statische lessen op het hoogste niveau hebben.

Laten we eens kijken wat er zal gebeuren als we proberen een klasse op het hoogste niveau statisch te maken.

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

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

Uitvoer

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

In het bovenstaande voorbeeld hebben we geprobeerd een statische klasse te maken Animal . Aangezien Java geen statische klasse op het hoogste niveau toestaat, krijgen we een foutmelding.


Java

  1. C# statisch trefwoord
  2. C# geneste klasse
  3. Java laatste trefwoord
  4. Java-instantie van Operator
  5. Java geneste en innerlijke klasse
  6. Java anonieme klasse
  7. Java Singleton-klasse
  8. Java-reflectie
  9. Java ObjectOutputStream-klasse
  10. Java-generieken
  11. Java-bestandsklasse