Вложенный класс java

Классы, которые объявлены вне любого класса являются классами верхнего уровня. Вложенные классы-это классы объявленные в качестве членов других классов или областей.

Есть четыре вида вложенных классов:

  • статические классы члены,
  • нестатические классы членов,
  • анонимные классы
  • локальные классы.

Анонимный класс java

Анонимный класс является классом без имени и если его одновременно объявили. Вы можете создать экземпляр анонимного класса,  чтобы указать выражение.

Экземпляр анонимного класса может получить доступ только к локальным переменным и к конечным окончательным параметрам.

Как определить анонимный класс?

//nookery.ru
 
abstract class Fish {
  abstract void eat();
}

public class Test {
  public static void main(final String[] args) {
    new Fish() {
      String msg = "Рыба ";

      @Override
      void eat() {
        System.out.println(msg);
      }
    }.eat();
  }
}

Результатом работы программы будет: Рыба ест.

Следующий код объявляет и инициализирует анонимный класс, который реализует интерфейс.

//nookery.ru
 
interface Fish {
  abstract void eat();
}

public class Test {
  public static void main(final String[] args) {
    new Fish() {
      String msg = (args.length == 1) ? args[0] : "Рыба ест";

      @Override
      public void eat() {
        System.out.println(msg);
      }
    }.eat();
  }
}

Результатом работы программы будет: Рыба ест.

Локальные классы java

Локальный класс является классом, который объявлен в любом месте, где объявлена локальная переменная . Локальный класс имеет тот же объем, как локальная переменная.

Локальный класс имеет имя и может быть использован повторно. Экземпляр локальный класс может получить доступ к конечным локальным переменным, и конечным параметрам.

Java Локальный класс

//nookery.ru
 
class MyClass {
  void myMethod(final int x) {
    final int y = x;
    
    class LocalClass {
      int a = x;
      int b = y;
    }
    
    LocalClass lc = new LocalClass();
    System.out.println(lc.a);
    System.out.println(lc.b);
  }
}

public class Test {
  public static void main(String[] args) {
    MyClass ec = new MyClass();
    ec.myMethod(20);
  }
}

Результатом работы программы будет: 20 20

Java члены класса

Член класса-это член класса включения. Каждый экземпляр члена класса ассоциируется с экземпляром внешнего класса.

Методы экземпляра членов класса могут быть вызваны методом экземпляра в классе приложения и получить доступ к нестатическим полям экземпляра класса приложения.

Следующий код имеет один внешний класс с именем EnclosingClass и нестатические члены класса с именем EnclosedClass .

//nookery.ru
 
class EnclosingClass {
  private int outerVariable;

  private void privateOuterMethod() {
    System.out.println(outerVariable);
  }

  class EnclosedClass {
    void accessEnclosingClass() {
      outerVariable = 1;
      privateOuterMethod();
    }
  }
}

public class Test {
  public static void main(String[] args) {
    EnclosingClass ec = new EnclosingClass();
    ec.new EnclosedClass().accessEnclosingClass();
  }
}

Результатом работы программы будет: 1

Статический член класса Java.

Статический член класса- является статическим членом внешнего класса. Статический член класса не может получить доступ к классу включения полей экземпляра и вызывать его методы экземпляра.

Статический член может получить доступ к классу включения статическим полям и вызывать его статические методы, включая закрытые (private) поля и методы.

Следующий код имеет статический член класса.

//nookery.ru
 
class Test {
  public static void main(String[] args) {
//    Test.EnclosedClass.accessEnclosingClass(); 
    MyClass.EnclosedClass ec = new MyClass.EnclosedClass();
    ec.accessEnclosingClass2(); 
  }
}

class MyClass {
  private static int outerVariable;

  private static void privateStaticOuterMethod() {
    System.out.println(outerVariable);
  }

  static void staticOuterMethod() {
    EnclosedClass.accessEnclosingClass();
  }

  static class EnclosedClass {
    static void accessEnclosingClass() {
      outerVariable = 1;
      privateStaticOuterMethod();
    }

    void accessEnclosingClass2() {
      staticOuterMethod();
    }
  }
}

Результатом работы программы будет: 1

Обновлено: 08.04.2017 — 11:28

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.