Sobes.tech
Junior

Millised klassi tüübid on Java-s olemas?

sobes.tech AI

Vastus AI-lt

Java-s on järgmised põhiliikide klasside tüübid:

  1. Tavaline klass (Standard Class)

    • Võib sisaldada välju, meetodeid, konstruktorid.
    • Võib pärida teistelt klassidelt, kui see pole final.
    • Võib rakendada liideseid.
    • Deklareeritakse juurdepääsuklassidega (public, protected, default, private).
  2. Abstraktne klass (Abstract Class)

    • Deklareeritakse sõnaga abstract.
    • Ei saa otse instantsiseerida.
    • Võib sisaldada abstraktseid meetodeid (ilma rakenduseta) ja tavalisi meetodeid.
    • Mõeldud pärimiseks; alamklassid peavad pakkuma abstraktsete meetodite rakenduse.
    // Abstraktne klass kujundi jaoks
    abstract class Shape {
        abstract double area(); // Abstraktne meetod pindala arvutamiseks
    
        void display() { // Tavaline meetod
            System.out.println("This is a shape.");
        }
    }
    
  3. Lõplik klass (Final Class)

    • Deklareeritakse sõnaga final.
    • Ei saa pärida teistelt klassidelt.
    • Kasutatakse klassi laiendamise vältimiseks, turvalisuse või muutumatuse tagamiseks.
    // Lõplik klass, mida ei saa pärida
    final class ImmutableString {
        private final String value;
    
        public ImmutableString(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
  4. Enum (Enum)

    • Eriline klassitüüp, mõeldud fikseeritud konstandite kogumi esindamiseks.
    • Deklareeritakse sõnaga enum.
    • Enum-konstandid on vaikimisi public static final.
    • Võib omada välju, meetodeid ja konstruktorid (private peidetud).
    // Nädalapäevade enum
    enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  5. Anonüümklass (Anonymous Class)

    • Klass ilma nimega, mis luuakse ja instantsiseerub samaaegselt.
    • Kasutatakse sageli liideste rakendamiseks või klasside laiendamiseks "kohapeal", kui on vaja ühekordset kasutust.
    • Ei saa omada väljendatud konstruktorid.
    // Anonüümklass Runnable liidese rakendamiseks
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Running in an anonymous class.");
        }
    };
    
  6. Sisemised klassid (Nested Class)

    • Klassid, mis on deklareeritud teise klassi sees.
    • On kahte tüüpi:
      • Statilised sisemised klassid (Static Nested Class): deklareeritud sõnaga static. Ei pääse otse ligi välise klassi mitte-staatilistele liikmetele. Instantsiseeritakse nagu tavaline klass.
      • Sisemised klassid (Inner Class): ei ole deklareeritud static. Neil on juurdepääs kõigile välise klassi liikmetele, kaasa arvatud private. Vajavad välise klassi eksemplari, et luua oma eksemplar.
    // Välise klass
    class OuterClass {
        private String outerField = "Outer";
    
        // Statiline sisemine klass
        static class StaticNestedClass {
            void display() {
                System.out.println("Inside StaticNestedClass.");
                // Ei pääse otse outerField-ile
            }
        }
    
        // Sisemine klass
        class InnerClass {
            void display() {
                System.out.println("Inside InnerClass. outerField: " + outerField); // Juurdepääs outerField-ile
            }
        }
    }
    
  7. Rekordklassid (Record - alates Java 14)

    • Deklareeritakse sõnaga record.
    • Mõeldud andmete salvestamiseks. Kompilator automaatselt genereerib konstruktorit, juurdepääsumeetodid (accessor methods), equals(), hashCode() ja toString().
    • Rekordiväljad on automaatselt final.
    // Rekord, mis esindab punkti 2D ruumis
    record Point(int x, int y) {
        // Kompilator genereerib konstruktorit, meetodid x(), y(), equals(), hashCode(), toString()
    }