Sobes.tech
Junior

Milyen típusú osztályok léteznek Java-ban?

sobes.tech MI

Válasz az MI-től

A Java-ban a következő fő típusú osztályok léteznek:

  1. Szokásos osztály (Standard Class)

    • Tartalmazhat mezőket, metódusokat, konstruktorokat.
    • Örökölhető más osztályoktól, kivéve ha final-ként van deklarálva.
    • Megvalósíthat interfészeket.
    • Hozzáférési módosítókkal (public, protected, default, private) deklarálják.
  2. Absztrakt osztály (Abstract Class)

    • A abstract kulcsszóval deklarálják.
    • Nem példányosítható közvetlenül.
    • Tartalmazhat absztrakt (megvalósítás nélküli) és normál metódusokat.
    • Öröklésre szánt; az alosztályoknak meg kell valósítaniuk az absztrakt metódusokat.
    // Egy alakzat absztrakt osztálya
    abstract class Shape {
        abstract double area(); // Az absztrakt metódus az terület számítására
    
        void display() { // Normál metódus
            System.out.println("Ez egy alakzat.");
        }
    }
    
  3. Végleges osztály (Final Class)

    • A final kulcsszóval deklarálják.
    • Nem örökölhető más osztályoktól.
    • Azt szolgálja, hogy megakadályozza az osztály kiterjesztését, biztonságot vagy változatlanságot biztosítson.
    // Végleges osztály, amit nem lehet örökölni
    final class ImmutableString {
        private final String value;
    
        public ImmutableString(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
  4. Enum (Enumerációk)

    • Egy speciális osztálytípus, amely egy rögzített konstansok készletét reprezentálja.
    • A enum kulcsszóval deklarálják.
    • Az enum konstansok alapértelmezés szerint public static final-ek.
    • Tartalmazhatnak mezőket, metódusokat és konstruktorokat (private-val rejtve).
    // A hét napjai enum
    enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  5. Névtelen osztályok (Anonymous Class)

    • Név nélküli osztály, amely egyszerre jön létre és példányosítódik.
    • Gyakran használják interfészek megvalósítására vagy osztályok "on the fly" bővítésére, amikor egyszeri használatra van szükség.
    • Nem tartalmazhatnak explicit konstruktort.
    // Egy Runnable interfészt megvalósító névtelen osztály létrehozása
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Fut egy névtelen osztályban.");
        }
    };
    
  6. Beágyazott osztályok (Nested Class)

    • Osztályok, amelyeket egy másik osztályon belül deklarálnak.
    • Két típusuk van:
      • Statikus beágyazott osztályok (Static Nested Class): static-ként deklarálják. Nincs közvetlen hozzáférés a külső osztály nem-statikus tagjaihoz. Általában normál osztályként példányosítják.
      • Belső osztályok (Inner Class): nem static-ként deklarálják. Minden taghoz hozzáférnek a külső osztálynak, beleértve a private-t is. Egy példányt igényelnek a külső osztályból.
    // Külső osztály
    class OuterClass {
        private String outerField = "Outer";
    
        // Statikus beágyazott osztály
        static class StaticNestedClass {
            void display() {
                System.out.println("A StaticNestedClass belsejében.");
                // Nincs közvetlen hozzáférés az outerField-hez
            }
        }
    
        // Belső osztály
        class InnerClass {
            void display() {
                System.out.println("Az InnerClass belsejében. outerField: " + outerField); // Hozzáférés az outerField-hez
            }
        }
    }
    
  7. Rekord osztályok (Record - Java 14-től)

    • A record kulcsszóval deklarálják.
    • Adatok tárolására szolgálnak. A fordító automatikusan generálja a konstruktort, az adathozzáférő metódusokat (accessor methods), az equals(), hashCode() és toString() metódusokat.
    • A rekord mezői implicit módon final-ek.
    // 2D pont reprezentálására szolgáló rekord
    record Point(int x, int y) {
        // A fordító generálja a konstruktort, az x(), y(), equals(), hashCode(), toString() metódusokat
    }