Урок 11: Внутренние и вложенные классы
В этом уроке мы рассмотрим внутренние и вложенные классы в Java, которые позволяют структурировать код и создавать более гибкие и модульные приложения.
Внутренние классы
Внутренние классы определяются внутри другого класса и имеют доступ к его членам, включая приватные. Пример внутреннего класса:
class OuterClass {
private String outerField = "Внешнее поле";
class InnerClass {
void display() {
System.out.println("Доступ к: " + outerField);
}
}
}
public class InnerClassExample {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.display();
}
}
Результат выполнения
Статические вложенные классы
Статические вложенные классы определяются внутри другого класса, но не имеют доступа к его членам. Они ведут себя как обычные классы, но являются логической частью внешнего класса. Пример:
class OuterClass {
static String outerField = "Внешнее поле";
static class StaticNestedClass {
void display() {
System.out.println("Доступ к: " + outerField);
}
}
}
public class StaticNestedClassExample {
public static void main(String[] args) {
OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass();
nested.display();
}
}
Результат выполнения
Упражнения
Упражнение 1: Внутренний класс для вычисления площади
Создайте класс Rectangle
с полями width
и height
. Внутри класса создайте внутренний класс AreaCalculator
, который имеет метод calculate
для вычисления площади прямоугольника. Создайте объект Rectangle
и вызовите метод calculate
внутреннего класса.
Решение:
class Rectangle {
int width;
int height;
Rectangle(int width, int height) {
this.width = width;
this.height = height;
}
class AreaCalculator {
int calculate() {
return width * height;
}
}
}
public class RectangleTest {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle(5, 10);
Rectangle.AreaCalculator calculator = rectangle.new AreaCalculator();
System.out.println("Площадь: " + calculator.calculate());
}
}
Объяснение: Мы создали класс Rectangle
с полями width
и height
, а также внутренний класс AreaCalculator
с методом calculate
, который вычисляет площадь прямоугольника. Затем создали объект rectangle
и вызвали метод calculate
.
Упражнение 2: Статический вложенный класс для вычисления факториала
Создайте класс MathUtils
с вложенным статическим классом FactorialCalculator
, который имеет метод calculate
для вычисления факториала числа. Создайте объект FactorialCalculator
и вызовите метод calculate
.
Решение:
class MathUtils {
static class FactorialCalculator {
int calculate(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
}
}
public class FactorialTest {
public static void main(String[] args) {
MathUtils.FactorialCalculator calculator = new MathUtils.FactorialCalculator();
int factorial = calculator.calculate(5);
System.out.println("Факториал 5: " + factorial);
}
}
Объяснение: Мы создали класс MathUtils
с вложенным статическим классом FactorialCalculator
, который имеет метод calculate
для вычисления факториала числа. Затем создали объект calculator
и вызвали метод calculate
для вычисления факториала числа 5.