Sobes.tech
Junior
158

Jaké typy tříd existují v Javě?

Odpověď od AI

sobes.tech AI

V jazyce Java existují následující hlavní typy tříd:

  1. Standardní třída (Standard Class)

    • Může obsahovat pole, metody, konstruktory.
    • Může být děděna jinými třídami, pokud není deklarována jako final.
    • Může implementovat rozhraní.
    • Je deklarována s přístupovými modifikátory (public, protected, default, private).
  2. Abstraktní třída (Abstract Class)

    • Je deklarována klíčovým slovem abstract.
    • Nemůže být přímo instanciována.
    • Může obsahovat abstraktní metody (bez implementace) a běžné metody.
    • Je určena k dědění; podtřídy musí poskytnout implementaci abstraktních metod.
    // Abstraktní třída pro tvar
    abstract class Shape {
        abstract double area(); // Abstraktní metoda výpočtu plochy
    
        void display() { // Běžná metoda
            System.out.println("Toto je tvar.");
        }
    }
    
  3. Konečná třída (Final Class)

    • Je deklarována klíčovým slovem final.
    • Nemůže být děděna jinými třídami.
    • Používá se k zabránění rozšíření třídy, zajištění bezpečnosti nebo neměnnosti implementace.
    // Konečná třída, kterou nelze dědit
    final class ImmutableString {
        private final String value;
    
        public ImmutableString(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
  4. Enum (Výčty)

    • Zvláštní typ třídy určený k reprezentaci pevné sady konstant.
    • Je deklarován klíčovým slovem enum.
    • Konstanty výčtu jsou implicitně public static final.
    • Může mít pole, metody a konstruktory (s skrytým modifikátorem private).
    // Výčet dnů v týdnu
    enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  5. Anonymní třídy (Anonymous Class)

    • Třída bez jména, která je vytvořena a instanciována současně.
    • Často se používá k implementaci rozhraní nebo rozšíření tříd "on the fly", když je potřeba jednorázové použití.
    • Nemůže mít explicitní konstruktory.
    // Vytvoření anonymní třídy implementující rozhraní Runnable
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Běží v anonymní třídě.");
        }
    };
    
  6. Vnořené třídy (Nested Class)

    • Třídy deklarované uvnitř jiné třídy.
    • Existují dva typy:
      • Statické vnořené třídy (Static Nested Class): deklarované s static. Nemají přímý přístup k nestatickým členům vnější třídy. Jsou instanciovány jako běžné třídy.
      • Vnitřní třídy (Inner Class): nejsou deklarovány jako static. Mají přístup ke všem členům vnější třídy, včetně private. Vyžadují instanci vnější třídy k jejich vytvoření.
    // Vnější třída
    class OuterClass {
        private String outerField = "Outer";
    
        // Statická vnořená třída
        static class StaticNestedClass {
            void display() {
                System.out.println("Uvnitř StaticNestedClass.");
                // Nemá přímý přístup k outerField
            }
        }
    
        // Vnitřní třída
        class InnerClass {
            void display() {
                System.out.println("Uvnitř InnerClass. outerField: " + outerField); // Přístup k outerField
            }
        }
    }
    
  7. Záznamové třídy (Record - od Java 14)

    • Deklarují se klíčovým slovem record.
    • Určeny pro ukládání dat. Kompilátor automaticky generuje konstruktor, přístupové metody (accessor methods), equals(), hashCode() a toString().
    • Pole záznamu jsou implicitně final.
    // Záznam pro reprezentaci bodu v 2D prostoru
    record Point(int x, int y) {
        // Kompilátor vygeneruje konstruktor, metody x(), y(), equals(), hashCode(), toString()
    }