Sobes.tech
Junior

Какви типове класове съществуват в Java?

sobes.tech AI

Отговор от AI

В Java съществуват следните основни типове класове:

  1. Стандартен клас (Standard Class)

    • Може да съдържа полета, методи, конструктори.
    • Може да бъде наследен от други класове, ако не е обявен като final.
    • Може да реализира интерфейси.
    • Обявява се с модификатори за достъп (public, protected, default, private).
  2. Абстрактен клас (Abstract Class)

    • Обявява се с ключовата дума abstract.
    • Не може да бъде директно инстанциран.
    • Може да съдържа абстрактни методи (без реализация) и обикновени методи.
    • Предназначен за наследяване; подкласовете трябва да предоставят реализация на абстрактните методи.
    // Абстрактен клас за фигура
    abstract class Shape {
        abstract double area(); // Абстрактен метод за изчисляване на площ
    
        void display() { // Обикновен метод
            System.out.println("Това е фигура.");
        }
    }
    
  3. Финален клас (Final Class)

    • Обявява се с ключовата дума final.
    • Не може да бъде наследен от други класове.
    • Използва се за предотвратяване на разширяване на класа, осигуряване на безопасност или неизменност на реализацията.
    // Финален клас, който не може да бъде наследен
    final class ImmutableString {
        private final String value;
    
        public ImmutableString(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
  4. Enum (Енум)

    • Специален тип клас, предназначен за представяне на фиксиран набор от константи.
    • Обявява се с ключовата дума enum.
    • Константите на енум по подразбиране са public static final.
    • Могат да имат полета, методи и конструктори (с скрит модификатор private).
    // Енум за дните от седмицата
    enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  5. Анонимни класове (Anonymous Class)

    • Клас без име, който се създава и инстанцира едновременно.
    • Често се използва за реализиране на интерфейси или разширяване на класове "на лету", когато е необходима еднократна употреба.
    • Не могат да имат явни конструктори.
    // Създаване на анонимен клас, реализиращ интерфейса Runnable
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Изпълнява се в анонимен клас.");
        }
    };
    
  6. Вложени класове (Nested Class)

    • Класове, обявени вътре в друг клас.
    • Има два типа:
      • Статични вложени класове (Static Nested Class): обявяват се с static. Нямат достъп до нестатичните членове на външния клас директно. Инстанцират се като обикновени класове.
      • Вътрешни класове (Inner Class): не се обявяват като static. Имат достъп до всички членове на външния клас, включително private. Изискват екземпляр на външния клас за създаването им.
    // Външен клас
    class OuterClass {
        private String outerField = "Outer";
    
        // Статичен вложен клас
        static class StaticNestedClass {
            void display() {
                System.out.println("Вътре в StaticNestedClass.");
                // Няма директен достъп до outerField
            }
        }
    
        // Вътрешен клас
        class InnerClass {
            void display() {
                System.out.println("Вътре в InnerClass. outerField: " + outerField); // Достъп до outerField
            }
        }
    }
    
  7. Записи (Record - от Java 14)

    • Обявяват се с ключовата дума record.
    • Предназначени за съхранение на данни. Компилаторът автоматично генерира конструктора, методите за достъп (accessor methods), equals(), hashCode() и toString().
    • Полетата на записа са неявно final.
    // Запис за представяне на точка в 2D пространство
    record Point(int x, int y) {
        // Компилаторът ще генерира конструктора, методите x(), y(), equals(), hashCode(), toString()
    }