Статический класс-член не является внутренним классом
Класс-член, определенный в теле другого класса, может быть объявлен статическим.
Пример
Следующий код объявляет класс верхнего уровня A и статический класс-член B:
class A { // Static member class public static class B { // Body for class B goes here } }
Примечание
Статический класс-член не является внутренним классом. Считается классом высшего уровня.
Статический класс-член также называется вложенным классом верхнего уровня.
Экземпляр класса A и экземпляр класса B могут существовать независимо, поскольку оба являются классами верхнего уровня.
Статический класс-член может быть объявлен общедоступным, защищенным, на уровне пакета или закрытым, чтобы ограничить его доступность за пределами окружающего его класса.
Есть два преимущества использования статического класса-члена:
- Статический класс-член может получить доступ к статическим членам окружающего его класса, включая частные статические члены.
- Пакет действует как контейнер для классов верхнего уровня, предоставляя пространство имен. Классы верхнего уровня, имеющие статические классы-члены, обеспечивают дополнительный уровень пространств имен.
Статический класс-член является прямым членом окружающего его класса верхнего уровня, а не членом пакета.
Объект статического класса-члена создается так же, как вы создаете объект класса верхнего уровня с помощью оператора new. Чтобы создать объект класса B, вы пишете
A.B bReference = new A.B();
Поскольку простое имя класса B находится в области видимости внутри класса A, мы можем использовать его простое имя для создания его объекта внутри класса A как
B bReference2 = new B(); // This statement appears inside class A code
Мы также можем использовать простое имя B вне класса A, импортировав класс com.java2s.innerclasses.A.B.
Пример 2
В следующем коде показано, как использовать статический внутренний класс.
public class Main { public static void main(String[] args) { Car.Tire m = new Car.Tire(17); Car.Tire m2 = new Car.Tire(19); //w w w. j a va 2 s . c o m Car.Keyboard k = new Car.Keyboard(122); Car.Keyboard k1 = new Car.Keyboard(142); System.out.println(m); System.out.println(m2); System.out.println(k); System.out.println(k1); } } class Car { // Static member class - Monitor public static class Tire { private int size; public Tire(int size) { this.size = size; } public String toString() { return "Monitor - Size:" + this.size + " inch"; } } // Static member class - Keyboard public static class Keyboard { private int keys; public Keyboard(int keys) { this.keys = keys; } public String toString() { return "Keyboard - Keys:" + this.keys; } } }
Приведенный выше код генерирует следующий результат.
Статический класс-член не является внутренним классом
Класс-член, определенный в теле другого класса, может быть объявлен статическим.
Пример
Следующий код объявляет класс верхнего уровня A и статический класс-член B:
class A { // Static member class public static class B { // Body for class B goes here } }
Примечание
Статический класс-член не является внутренним классом. Считается классом высшего уровня.
Статический класс-член также называется вложенным классом верхнего уровня.
Экземпляр класса A и экземпляр класса B могут существовать независимо, поскольку оба являются классами верхнего уровня.
Статический класс-член может быть объявлен общедоступным, защищенным, на уровне пакета или закрытым, чтобы ограничить его доступность за пределами окружающего его класса.
Есть два преимущества использования статического класса-члена:
- Статический класс-член может получить доступ к статическим членам окружающего его класса, включая частные статические члены.
- Пакет действует как контейнер для классов верхнего уровня, предоставляя пространство имен. Классы верхнего уровня, имеющие статические классы-члены, обеспечивают дополнительный уровень пространств имен.
Статический класс-член является прямым членом окружающего его класса верхнего уровня, а не членом пакета.
Объект статического класса-члена создается так же, как вы создаете объект класса верхнего уровня с помощью оператора new. Чтобы создать объект класса B, вы пишете
A.B bReference = new A.B();
Поскольку простое имя класса B находится в области видимости внутри класса A, мы можем использовать его простое имя для создания его объекта внутри класса A как
B bReference2 = new B(); // This statement appears inside class A code
Мы также можем использовать простое имя B вне класса A, импортировав класс com.java2s.innerclasses.A.B.
Пример 2
В следующем коде показано, как использовать статический внутренний класс.
public class Main { public static void main(String[] args) { Car.Tire m = new Car.Tire(17); Car.Tire m2 = new Car.Tire(19); //w w w. j a va 2 s . c o m Car.Keyboard k = new Car.Keyboard(122); Car.Keyboard k1 = new Car.Keyboard(142); System.out.println(m); System.out.println(m2); System.out.println(k); System.out.println(k1); } } class Car { // Static member class - Monitor public static class Tire { private int size; public Tire(int size) { this.size = size; } public String toString() { return "Monitor - Size:" + this.size + " inch"; } } // Static member class - Keyboard public static class Keyboard { private int keys; public Keyboard(int keys) { this.keys = keys; } public String toString() { return "Keyboard - Keys:" + this.keys; } } }
Приведенный выше код генерирует следующий результат.
Monitor - Size: 17 Monitor - Size: 19 Keyboard - Keys: 122 Keyboard - Keys: 142