Junior
Java-ში რა ტიპის კლასები არსებობს?
sobes.tech AI
პასუხი AI-სგან
Java-ში არსებობს შემდეგი ძირითადი კლასების ტიპები:
-
სადროული (Standard Class)
- შეიძლება შეიცავდეს ველები, მეთოდები, კონსტრუქტორები.
- შეიძლება მემკვიდრეობა მიიღოს სხვა კლასებიდან, თუ არ არის გამოცხადებული
final-ად. - შეუძლია განახორციელოს ინტერფეისები.
- გამოცხადებულია წვდომის მოდიფიკატორებით (
public,protected,default,private).
-
აბსტრაქტული (Abstract Class)
- გამოცხადებულია სიტყვით
abstract. - პირდაპირ ინსტანცირება შეუძლებელია.
- შეიძლება შეიცავდეს აბსტრაქტულ მეთოდებს (რეალიზაციის გარეშე) და ჩვეულებრივ მეთოდებს.
- განკუთვნილია მემკვიდრეობისთვის; ქვესკლასებმა უნდა უზრუნველყონ აბსტრაქტული მეთოდების რეალიზაცია.
// აბსტრაქტული კლასი ფიგურისთვის abstract class Shape { abstract double area(); // აბსტრაქტული მეთოდი ფართობის გამოთვლისთვის void display() { // ჩვეულებრივი მეთოდი System.out.println("This is a shape."); } } - გამოცხადებულია სიტყვით
-
ფინალური (Final Class)
- გამოცხადებულია სიტყვით
final. - სხვა კლასებისგან მემკვიდრეობა არ შეიძლება.
- გამოიყენება კლასის გაფართოების თავიდან ასაცილებლად, უსაფრთხოების ან უცვლელობის უზრუნველსაყოფად.
// ფინალური კლასი, რომელსაც მემკვიდრეობა არ შეუძლია final class ImmutableString { private final String value; public ImmutableString(String value) { this.value = value; } public String getValue() { return value; } } - გამოცხადებულია სიტყვით
-
ენუმი (Enum)
- სპეციალური კლასი, განკუთვნილი ფიქსირებული კონსტანტების ჯგუფის გამოსახატავად.
- გამოცხადებულია სიტყვით
enum. - ენუმერაციის კონსტანტები ჩვეულებრივ
public static final-ია. - შეიძლება ჰქონდეს ველები, მეთოდები და კონსტრუქტორები (
privateდამალული მოდიფიკატორით).
// კვირის დღეების enum enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } -
ანონიმური (Anonymous Class)
- სახელი არ აქვს, რომელიც ერთდროულად ქმნის და ინსტანცირებს.
- ხშირად გამოიყენება ინტერფეისების რეალიზაციის ან კლასების გაფართოებისათვის "სწრაფად", როდესაც საჭიროა ერთჯერადი გამოყენება.
- არ შეიძლება ჰქონდეს გამჭვირვალე კონსტრუქტორები.
// Runnable ინტერფეისის რეალიზაციის ანონიმური კლასი Runnable r = new Runnable() { @Override public void run() { System.out.println("Running in an anonymous class."); } }; -
შიდა (Nested Class)
- კლასები, რომლებიც გამოცხადებულია სხვა კლასის შიგნით.
- ორი ტიპი არსებობს:
- სტატიკური შიდა კლასები (Static Nested Class): გამოცხადებულია
static-ით. არ აქვს პირდაპირი წვდომა გარეგანი კლასის არა-სტატიკურ წევრებზე. ინსტანცირებულია როგორც ჩვეულებრივი კლასი. - შიდა კლასები (Inner Class): არ არის გამოცხადებული
static-ით. აქვს წვდომა ყველა წევრზე გარეგანი კლასიდან, მათ შორისprivate-ზე. საჭიროებს გარეგანი კლასის ინстанციას მისი ინстанციის შექმნისთვის.
- სტატიკური შიდა კლასები (Static Nested Class): გამოცხადებულია
// გარეგანი კლასი 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-ზე } } } -
რეკორდები (Record - Java 14-დან)
- გამოცხადებულია სიტყვით
record. - განკუთვნილია მონაცემების შენახვისთვის. კომპილატორი ავტომატურად ქმნის კონსტრუქტორს, წვდომის მეთოდებს (
accessor methods),equals(),hashCode()დაtoString()-ს. - რეკორდის ველები ავტომატურად
final-ია.
// 2D წერტილის გამოსახატავად რეკორდი record Point(int x, int y) { // კომპილატორი შექმნის კონსტრუქტორს, მეთოდებს x(), y(), equals(), hashCode(), toString() } - გამოცხადებულია სიტყვით