Java Innerklasse


Java Innerklasse

In Java is dit ook moontlik om klasse te nes ('n klas binne 'n klas). Die doel van geneste klasse is om klasse wat bymekaar hoort te groepeer, wat jou kode meer leesbaar en onderhoubaar maak.

Om toegang tot die binneklas te verkry, skep 'n voorwerp van die buitenste klas en skep dan 'n voorwerp van die binneklas:

Voorbeeld

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

// Outputs 15 (5 + 10)


Privaat Binneklas

Anders as 'n "gewone" klas, kan 'n binneklas privateof wees protected. As jy nie wil hê dat eksterne voorwerpe toegang tot die binneklas moet kry nie, verklaar die klas as private:

Voorbeeld

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

As jy probeer om toegang te verkry tot 'n privaat binneklas vanaf 'n buiteklas, vind 'n fout plaas:

Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
              ^



Statiese binneklas

'n Binneklas kan ook wees static, wat beteken dat jy toegang daartoe kan kry sonder om 'n voorwerp van die buitenste klas te skep:

Voorbeeld

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

// Outputs 5

Let wel: net soos staticeienskappe en metodes, het 'n staticbinneklas nie toegang tot lede van die buitenste klas nie.


Toegang tot buitenste klas vanaf binneklas

Een voordeel van innerlike klasse is dat hulle toegang het tot eienskappe en metodes van die buitenste klas:

Voorbeeld

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

// Outputs 10