Sobes.tech
Junior

Koje vrste klase postoje u Javi?

sobes.tech АИ

Одговор од АИ

У Јави постоје следеће главне врсте класа:

  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("Рunning у анонимној класи.");
        }
    };
    
  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()
    }