Sobes.tech
Junior

Kokie klasės tipai yra Java?

sobes.tech AI

Atsakymas iš AI

Java yra šie pagrindiniai klasių tipai:

  1. Standartinė (Standard Class)

    • Gali turėti laukus, metodus, konstruktorius.
    • Gali būti paveldėta kitų klasių, jei nėra deklaruota kaip final.
    • Gali įgyvendinti sąsajas.
    • Deklaruojama su prieigos modifikatoriais (public, protected, default, private).
  2. Abstract (Abstract Class)

    • Deklaruojama su žodžiu abstract.
    • Negali būti tiesiogiai instancijuojama.
    • Gali turėti abstrakčius metodus (be realizacijos) ir įprastus metodus.
    • Skirta paveldėjimui; pogrindžiai turi pateikti abstrakčių metodų realizaciją.
    // Abstrakti klasė figūros apibrėžimui
    abstract class Shape {
        abstract double area(); // Abstraktus metodas ploto skaičiavimui
    
        void display() { // Įprastas metodas
            System.out.println("This is a shape.");
        }
    }
    
  3. Finalinė (Final Class)

    • Deklaruojama su žodžiu final.
    • Negali būti paveldėta kitų klasių.
    • Naudojama norint užkirsti kelią klasių plėtimui, užtikrinti saugumą ar nepakitusią įgyvendinimą.
    // Finalinė klasė, kurios paveldėti negalima
    final class ImmutableString {
        private final String value;
    
        public ImmutableString(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
  4. Enum (Enum)

    • Specialus klasės tipas, skirtas reprezentuoti fiksuotą konstatų rinkinį.
    • Deklaruojama su žodžiu enum.
    • Enum konstatų reikšmės pagal numatytuosius nustatymus yra public static final.
    • Gali turėti laukus, metodus ir konstruktorius (su paslėptu private modifikatoriumi).
    // Savaitės dienų enum
    enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  5. Anoniminės (Anonymous Class)

    • Be vardo klasė, kuri kuriama ir instancijuojama vienu metu.
    • Dažnai naudojama sąsajų įgyvendinimui arba klasių išplėtimui "gyvai", kai reikalinga vienkartinė naudojimas.
    • Negali turėti aiškių konstruktorių.
    // Sukurti anoniminę klasę, įgyvendinančią Runnable sąsają
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Running in an anonymous class.");
        }
    };
    
  6. Vidinės (Nested Class)

    • Klasės, deklaruotos kitos klasės viduje.
    • Yra dviejų tipų:
      • Statinės vidinės klasės (Static Nested Class): deklaruotos su static. Neturi tiesioginės prieigos prie nestatinių išorinio klases narių. Instancijuojamos kaip įprastos klasės.
      • Vidinės klasės (Inner Class): nėra deklaruotos kaip static. Turi prieigą prie visų išorinio klases narių, įskaitant private. Reikalauja išorinio klases egzempliorio, kad sukurtų savo egzempliorių.
    // Išorinis klasė
    class OuterClass {
        private String outerField = "Outer";
    
        // Statinė vidinė klasė
        static class StaticNestedClass {
            void display() {
                System.out.println("Inside StaticNestedClass.");
                // Nėra tiesioginės prieigos prie outerField
            }
        }
    
        // Vidinė klasė
        class InnerClass {
            void display() {
                System.out.println("Inside InnerClass. outerField: " + outerField); // Prieiga prie outerField
            }
        }
    }
    
  7. Įrašai (Record - nuo Java 14)

    • Deklaruojami su žodžiu record.
    • Skirti duomenų saugojimui. Kompiliatorius automatiškai generuoja konstruktorių, prieigos metodus (accessor methods), equals(), hashCode() ir toString().
    • Rekoardo laukai yra neabejotinai final.
    // Rekoordas, atvaizduojantis tašką 2D erdvėje
    record Point(int x, int y) {
        // Kompiliatorius sugeneruos konstruktorių, metodus x(), y(), equals(), hashCode(), toString()
    }