Middle
რა ტიპის შიდა კლასები არსებობს?
sobes.tech AI
პასუხი AI-სგან
სტატიკური შიგნით კლასები და შიგნით კლასები (სტატიკური არამატერიალური შიგნით კლასები).
-
სტატიკური შიგნით კლასები:
- გამოაცხადება
staticსაკვანძო სიტყვით. - აქვთ წვდომა მხოლოდ სტატიკურ წევრებზე (ფილდებსა და მეთოდებზე) გარეგან კლასში, მათ შორის პირადულებზე.
- პირდაპირ არ აქვთ წვდომა არასტატიკურ წევრებზე გარეგან კლასში.
- შეიძლება იყოს ინსტანცირებული გარეგან კლასის ნიმუშის გარეშე.
class Outer { private static int staticVar = 10; private int instanceVar = 20; static class StaticNested { void display() { System.out.println("Static var: " + staticVar); // System.out.println("Instance var: " + instanceVar); // კომპილაციის შეცდომა } } } - გამოაცხადება
-
შიგნით კლასები (არასტატიკური შიგნით კლასები):
- გამოაცხადება
staticსაკვანძო სიტყვით გარეშე. - აქვთ სრული წვდომა ყველა წევრზე (სტატიკურ და არასტატიკურ) გარეგან კლასში, მათ შორის პირადულებზე.
- არ შეიძლება შეიცავდეს სტატიკურ წევრებს (ფილდებს ან მეთოდებს), გარდა ფინალური კონსტანტების.
- საჭიროებს გარეგან კლასის ნიმუშის არსებობას მათი შექმნისთვის.
class Outer { private static int staticVar = 10; private int instanceVar = 20; class Inner { void display() { System.out.println("Static var: " + staticVar); System.out.println("Instance var: " + instanceVar); } } } - გამოაცხადება
-
ლოკალური კლასები:
- გამოაცხადება მეთოდებში, კონსტრუქტორებში ან ინიციალიზაციის ბლოკებში.
- აქვთ წვდომა ყველა ფინალურ და ეფექტურად ფინალურ ლოკალურ ცვლელებზე, ასევე გარეგან კლასის წევრებზე, სადაც გამოაცხადეს.
- მათი ხილვადობის არეალი შეზღუდულია იმ ბლოკით, სადაც გამოაცხადეს.
class Outer { void myMethod() { final int localVar = 5; // ეფექტურად ფინალური class LocalInner { void display() { System.out.println("Local var: " + localVar); } } LocalInner local = new LocalInner(); local.display(); } } -
ანონიმური კლასები:
- სახელწოდების გარეშე ლოკალური კლასები.
- შექმნილია და ინსტანცირებული ერთდროულად.
- ხშირად გამოიყენება ინტერფეისების რეალიზაციის ან კლასების გაფართოებისათვის.
interface MyInterface { void doSomething(); } class Outer { void myMethod() { MyInterface anon = new MyInterface() { @Override public void doSomething() { System.out.println("ანონიმურად რაღაც კეთდება."); } }; anon.doSomething(); } }
სტატიკური შიგნით კლასებისა და შიგნით კლასების ძირითადი განსხვავებები:
| ხასიათი | სტატიკური შიგნით კლასი | შიგნით კლასი |
|---|---|---|
| საკვანძო სიტყვა | static |
არ არის |
| წვდომა წევრებზე | მხოლოდ გარეგან კლასის სტატიკურ წევრებზე | ყველა წევრზე გარეგან კლასში |
| ნიმუშის შექმნა | გარეგან კლასის ნიმუშის გარეშე | საჭიროებს გარეგან კლასის ნიმუშს |
| სტატიკური წევრები | შეიძლება შეიცავდეს | არ შეიძლება (გარდა კონსტანტების) |