Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Внутренние классы в Java: дизайн, синтаксис и практические примеры

В Java класс может быть объявлен внутри другого класса. Внешний класс называется outer class, внутренний — nested class (вложенный).

Типы вложенных классов

Внутренние классы (Inner Classes)

Внутренний класс может быть private, что обеспечивает инкапсуляцию. Он имеет доступ ко всем членам внешнего класса, включая private.

Обычный внутренний класс

class Outer_Demo {
    int num;
    private class Inner_Demo {
        public void print() {
            System.out.println("This is an inner class");
        }
    }
    void display_Inner() {
        Inner_Demo inner = new Inner_Demo();
        inner.print();
    }
}

public class My_class {
    public static void main(String args[]) {
        Outer_Demo outer = new Outer_Demo();
        outer.display_Inner();
    }
}

Результат: This is an inner class.

Доступ к private членам внешнего класса

class Outer_Demo {
    private int num = 175;
    public class Inner_Demo {
        public int getNum() {
            System.out.println("This is the getnum method of the inner class");
            return num;
        }
    }
}

public class My_class2 {
    public static void main(String args[]) {
        Outer_Demo outer = new Outer_Demo();
        Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();
        System.out.println(inner.getNum());
    }
}

Результат: This is the getnum method of the inner class: 175

Локальный внутренний класс (Method-local Inner Class)

Объявляется внутри метода. Область видимости ограничена методом. Может обращаться к final/эффективно final локальным переменным метода.

public class Outerclass {
    void my_Method() {
        int num = 23;
        class MethodInner_Demo {
            public void print() {
                System.out.println("This is method inner class " + num);
            }
        }
        MethodInner_Demo inner = new MethodInner_Demo();
        inner.print();
    }
    public static void main(String args[]) {
        new Outerclass().my_Method();
    }
}

Результат: This is method inner class 23

Анонимный внутренний класс (Anonymous Inner Class)

Класс без имени, объявляется и инстанцируется одновременно. Используется для переопределения методов класса или интерфейса.

abstract class AnonymousInner {
    public abstract void mymethod();
}

public class Outer_class {
    public static void main(String args[]) {
        AnonymousInner inner = new AnonymousInner() {
            public void mymethod() {
                System.out.println("This is an example of anonymous inner class");
            }
        };
        inner.mymethod();
    }
}

Результат: This is an example of anonymous inner class

Анонимный класс как аргумент метода


interface Message {
    String greet();
}

public class My_class {
    public void displayMessage(Message m) {
        System.out.println(m.greet() + ", This is an example of anonymous inner class as an argument");
    }
    public static void main(String args[]) {
        My_class obj = new My_class();
        obj.displayMessage(new Message() {
            public String greet() { return "Hello"; }
        });
    }
}

Результат: Hello, This is an example of anonymous inner class as an argument

Статический вложенный класс (Static Nested Class)

Объявляется с модификатором static. Не требует экземпляра внешнего класса. Не имеет доступа к нестатическим членам внешнего класса.


public class Outer {
    static class Nested_Demo {
        public void my_method() {
            System.out.println("This is my nested class");
        }
    }
    public static void main(String args[]) {
        Outer.Nested_Demo nested = new Outer.Nested_Demo();
        nested.my_method();
    }
}

Результат: This is my nested class

java

  1. Ключевое слово final в Java: переменные, методы и классы
  2. Оператор instanceof в Java: полное руководство с примерами
  3. Вложенные и внутренние классы в Java: типы, примеры и лучшие практики
  4. Статические вложенные классы в Java: использование, отличия и примеры
  5. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  6. Паттерн Singleton в Java: как реализовать и безопасно использовать
  7. Рефлексия в Java: инспекция классов, методов и полей во время выполнения
  8. Освоение Java ObjectOutputStream: сериализация, методы и практические примеры
  9. Освоение Java Generics: создание переиспользуемого, типобезопасного кода
  10. Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление