Классы, которые объявлены вне любого класса являются классами верхнего уровня. Вложенные классы-это классы объявленные в качестве членов других классов или областей.
Есть четыре вида вложенных классов:
- статические классы члены,
- нестатические классы членов,
- анонимные классы
- локальные классы.
Анонимный класс 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
