Sobes.tech
Junior

Какви видове класове има в Java?

sobes.tech AI

Отговор от AI

  • Обикновени (регулярни / конкретни) класове: Могат да бъдат инстанцирани, съдържат полета, методи, конструктори.
  • Абстрактни класове: Не могат да бъдат инстанцирани директно. Могат да съдържат абстрактни методи (без реализация) и обикновени методи. Използват се за определяне на общи характеристики за подкласовете.
    abstract class AbstractClass {
        abstract void abstractMethod(); // Абстрактен метод
        void regularMethod() {
            System.out.println("Обикновен метод");
        }
    }
    
  • Вложени класове (nested classes): Декларират се вътре в друг клас. Могат да бъдат:
    • Статични вложени класове (static nested classes): Нямат достъп до нестатичните членове на външния клас. Създават се без екземпляр на външния клас.
      class OuterClass {
          static class StaticNestedClass {
              // ...
          }
      }
      
    • Вътрешни класове (inner classes): Имат достъп до всички членове на външния клас (включително приватните). Свързани са с екземпляр на външния клас.
      class OuterClass {
          class InnerClass {
              // Има достъп до членовете на OuterClass
          }
      }
      
    • Локални класове (local classes): Декларират се вътре в метод, цикъл или if блок. Достъпът до тях е ограничен до областта им на декларация.
      class OuterClass {
          void someMethod() {
              class LocalClass {
                  // Локално деклариран
              }
              LocalClass obj = new LocalClass();
          }
      }
      
    • Анонимни класове (anonymous classes): Без име, създават се едновременно с декларацията или инстанцирането. Използват се за еднократна употреба.
      interface MyInterface {
          void myMethod();
      }
      
      MyInterface anon = new MyInterface() {
          @Override
          public void myMethod() {
              System.out.println("Анонимен клас");
          }
      };
      
  • Записани класове (records) (от Java 14): Компактен синтаксис за обявяване на неизменяеми класове, предназначени за съхранение на данни (POJO).
    record Person(String name, int age) {
        // Автоматично генерирани конструктор, гетъри, equals(), hashCode(), toString()
    }