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:
-
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).
-
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."); } } - Je deklarována klíčovým slovem
-
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; } } - Je deklarována klíčovým slovem
-
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 } -
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ě."); } }; -
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í.
- Statické vnořené třídy (Static Nested Class): deklarované s
// 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 } } } -
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()atoString(). - 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() } - Deklarují se klíčovým slovem