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()
    }