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("This is a shape.");
        }
    }
    
  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("Running in an anonymous class.");
        }
    };
    
  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("Inside StaticNestedClass.");
                // Няма директен достъп до outerField
            }
        }
    
        // Вътрешен клас
        class InnerClass {
            void display() {
                System.out.println("Inside 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()
    }