პროგრამირების ენაში რა სახის შიდა კლასები არსებობს?
sobes.tech AI
პასუხი AI-სგან
Java- ში შიდა კლასები:
-
სტატიკური შიდა კლასები (Static Nested Classes): მოპყრობენ როგორც ჩვეულებრივ სტატიკურ წევრებს კლასში. არ აქვთ წვდომა გარეგანი კლასის ნესტატიკ წევრებზე. შექმნილია გარეგანი კლასის ინстанციის გარეშე.
public class Outer { private static String staticMsg = "სტატიკური შეტყობინება"; private String instanceMsg = "ინსტანციის შეტყობინება"; static class StaticNested { void displayStatic() { // წვდომა გარეგანი კლასის სტატიკურ წევრებზე System.out.println(staticMsg); // არ აქვს წვდომა გარეგანი კლასის ნესტატიკ წევრებზე // System.out.println(instanceMsg); // კომპილაციის შეცდომა } } } -
შიდა კლასები (Inner Classes): დაკავშირებულია გარეგანი კლასის ინстанციასთან. აქვთ სრული წვდომა ყველა (სტატიკურ და ნესტატიკ) წევრზე, მათ შორის პირადზე. შეიძლება იყოს
private,protected,package-privateანpublic.public class Outer { private static String staticMsg = "სტატიკური შეტყობინება"; private String instanceMsg = "ინსტანციის შეტყობინება"; class Inner { void display() { // წვდომა სტატიკურ და ნესტატიკ წევრებზე System.out.println(staticMsg); System.out.println(instanceMsg); } } } -
ლოკალური კლასები (Local Classes): გამოაცხადება ბლოკის შიგნით (მეთოდი, კონსტრუქტორი ან სტატიკური ინიციალიზატორი). ხელმისაწვდომია მხოლოდ ამ ბლოკში. შეიძლება მიმართოს
finalან ეფექტურადfinalლოკალურ ცვლადებს და პარამეტრებს, ასევე ყველა გარეგანი წევრს.public class Outer { private String instanceMsg = "ინსტანციის შეტყობინება"; void methodWithLocalClass() { final String localVar = "ლოკალური ცვლადი"; // ან ეფექტურად final class Local { void display() { System.out.println(instanceMsg); System.out.println(localVar); } } Local localObj = new Local(); localObj.display(); } } -
ანონიმური კლასები (Anonymous Classes): არიან სახელწოდების გარეშე ლოკალური კლასები. გამოიყენება ერთდროულად კლასის გამოცხადებისა და ინстанციის შექმნისთვის, რომელიც ან რეალიზებს ინტერფეისს, ან განავრცობს კლასს. სასარგებლოა პატარა, ერთჯერადი ობიექტების შესაქმნელად.
public class Outer { void methodWithAnonymousClass() { // ანონიმური კლასი, რომელიც რეალიზებს Runnable ინტერფეისს Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("მიმდინარეობს ანონიმურ კლასიდან"); } }; new Thread(myRunnable).start(); // ანონიმური კლასი, რომელიც განავრცობს Thread კლასს Thread myThread = new Thread() { @Override public void run() { System.out.println("მიმდინარეობს ანონიმურ კლასი, რომელიც განავრცობს Thread-ს"); } }; myThread.start(); } }
შიდა კლასების ტიპების შედარება:
| ტიპი | განცხადების ადგილი | წვდომა გარეგანი კლასის წევრებზე | საჭიროა გარეგანი კლასის ინстанცია შექმნას | მოდიფიკატორები |
|---|---|---|---|---|
| სტატიკური შიდა კლასი | კლასის შიგნით, static-ით |
მხოლოდ სტატიკურებზე | არა | ყველა |
| შიდა კლასი (Inner) | კლასის შიგნით (არა სტატიკური) | ყველა (სტატიკური და არა-სტატიკური) | დიახ | ყველა |
| ლოკალური კლასი | ბლოკის შიგნით (მეთოდი, კონსტრუქტორი, ინიციალიზატორი) | ყველა გარეგანი წევრი + final ან ეფექტური final ლოკალური ცვლადები |
დიახ | არა |