Sobes.tech
Junior

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

sobes.tech AI

Odpověď od AI

  • Obvyklé (regulární / konkrétní) třídy: Mohou být instancovány, obsahují pole, metody, konstruktory.
  • Abstraktní třídy: Nemohou být přímo instancovány. Mohou obsahovat abstraktní metody (bez implementace) a běžné metody. Používají se k definování společných vlastností pro podtřídy.
    abstract class AbstractClass {
        abstract void abstractMethod(); // Abstraktní metoda
        void regularMethod() {
            System.out.println("Běžná metoda");
        }
    }
    
  • Vnořené třídy (nested classes): Jsou deklarovány uvnitř jiné třídy. Mohou být:
    • Statické vnořené třídy (static nested classes): Nemají přístup k nestatickým členům vnější třídy. Jsou vytvářeny bez instance vnější třídy.
      class OuterClass {
          static class StaticNestedClass {
              // ...
          }
      }
      
    • Vnitřní třídy (inner classes): Mají přístup ke všem členům vnější třídy (včetně soukromých). Jsou vázány na instanci vnější třídy.
      class OuterClass {
          class InnerClass {
              // Má přístup ke členům OuterClass
          }
      }
      
    • Lokální třídy (local classes): Jsou deklarovány uvnitř metody, cyklu nebo if bloku. Přístup k nim je omezen na jejich deklarované pole.
      class OuterClass {
          void someMethod() {
              class LocalClass {
                  // Lokální
              }
              LocalClass obj = new LocalClass();
          }
      }
      
    • Anonymní třídy (anonymous classes): Bez jména, jsou vytvářeny současně s deklarací nebo instancováním. Používají se pro jednorázové použití.
      interface MyInterface {
          void myMethod();
      }
      
      MyInterface anon = new MyInterface() {
          @Override
          public void myMethod() {
              System.out.println("Anonymní třída");
          }
      };
      
  • Záznamové třídy (records) (od Java 14): Kompaktní syntaxe pro deklaraci neměnných tříd určených k ukládání dat (POJO).
    record Person(String name, int age) {
        // Automaticky generované konstruktor, gettery, equals(), hashCode(), toString()
    }