Sobes.tech
Junior

Ի՞նչ տեսակների դասեր կան Java-ում։

sobes.tech AI

Պատասխան AI-ից

Java-յում կան հետևյալ հիմնական դասերի տեսակները:

  1. Սովորական (Standard Class)

    • Կարող են պարունակել դաշտեր, մեթոդներ, կոնստրուկտորներ:
    • Կարող են ժառանգվել այլ դասերից, եթե չեն հայտարարված որպես final:
    • Կարող են իրականացնել ինտերֆեյսներ:
    • Հայտարարվում են մուտք գործելու մոդիֆիկատորներով (public, protected, default, private):
  2. Աբստրակտ (Abstract Class)

    • Հայտարարվում է abstract բառով:
    • Չեն կարող անմիջապես ինստանցիա ստեղծել:
    • Կարող են պարունակել աբստրակտ մեթոդներ (առանց իրականացման) և սովորական մեթոդներ:
    • Օգտագործվում են ժառանգելու համար; ենթակլասները պետք է տրամադրեն աբստրակտ մեթոդների իրականացումը:
    // Աբստրակտ դաս գծի համար
    abstract class Shape {
        abstract double area(); // Աբստրակտ մեթոդ տարածքի հաշվարկի համար
    
        void display() { // Սովորական մեթոդ
            System.out.println("This is a shape.");
        }
    }
    
  3. Վերջնական (Final Class)

    • Հայտարարվում է final բառով:
    • Չեն կարող ժառանգվել այլ դասերից:
    • Օգտագործվում են դասի ընդլայնումը կանխելու, անվտանգության կամ փոփոխության չլինելու համար:
    // Վերջնական դաս, որը չի կարող ժառանգվել
    final class ImmutableString {
        private final String value;
    
        public ImmutableString(String value) {
            this.value = value;
        }
    
        public String getValue() {
            return value;
        }
    }
    
  4. Համարային (Enum)

    • Հատուկ դասի տեսակ, նախատեսված հաստատված կոնստանտների հավաքածու ներկայացնելու համար:
    • Հայտարարվում է enum բառով:
    • Դասակարգման կոնստանտները ըստ նախնական արժեքի public static final են:
    • Կարող են ունենալ դաշտեր, մեթոդներ և կոնստրուկտորներ (թաքնված private մոդիֆիկատորով):
    // Ուրբաթ օրերի enum
    enum DayOfWeek {
        MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
    }
    
  5. Անանուն (Anonymous Class)

    • Անուն չունեցող դաս, որը ստեղծվում և ինստանցիա է ստանում միաժամանակ:
    • Օգտագործվում են հաճախ ինտերֆեյսների իրականացման կամ դասերի ընդլայնման համար "առավոտ" ժամանակ, երբ անհրաժեշտ է մեկանգամյա օգտագործում:
    • Չեն կարող ունենալ բացահայտ կոնստրուկտորներ:
    // Անանուն դասի ստեղծում, որը իրականացնում է Runnable ինտերֆեյսը
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("Running in an anonymous class.");
        }
    };
    
  6. Ներքին (Nested Class)

    • Դասեր, որոնք հայտարարվում են այլ դասի ներսում:
    • Կան երկու տեսակ.
      • Ստատիկ ներքին դասեր (Static Nested Class): հայտարարվում է static բառով: Չեն ունենա մուտք դեպի ոչ-ստատիկ անդամներ արտաքին դասից ուղղակի:
      • Ներքին դասեր (Inner Class): չեն հայտարարվում որպես static: ունեն մուտք դեպի բոլոր անդամներ արտաքին դասից, ներառյալ private:
      • Պահանջվում է արտաքին դասի օրինակ՝ իրենց օրինակ ստեղծելու համար:
    // Արտաքին դաս
    class OuterClass {
        private String outerField = "Outer";
    
        // Ստատիկ ներքին դաս
        static class StaticNestedClass {
            void display() {
                System.out.println("Inside StaticNestedClass.");
                // Չունի ուղիղ մուտք outerField-ին
            }
        }
    
        // Ներքին դաս
        class InnerClass {
            void display() {
                System.out.println("Inside InnerClass. outerField: " + outerField); // Մուտք outerField
            }
        }
    }
    
  7. Ռեկորդային դասեր (Record - Java 14-ից սկսած)

    • Հայտարարվում է record բառով:
    • Օգտագործվում է տվյալների պահեստավորման համար: Կոմպիլյատորը ինքնաբերաբար ստեղծում է կոնստրուկտոր, մուտք գործելու մեթոդներ (accessor methods), equals(), hashCode() և toString():
    • Ռեկորդի դաշտերը անգիտակցաբար final են:
    // Բնութագրում է 2D կետը ներկայացնող ռեկորդ
    record Point(int x, int y) {
        // Կոմպիլյատորը կստեղծի կոնստրուկտոր, x(), y(), equals(), hashCode(), toString()
    }