Sobes.tech
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 არ არის
წვდომა წევრებზე მხოლოდ გარეგან კლასის სტატიკურ წევრებზე ყველა წევრზე გარეგან კლასში
ნიმუშის შექმნა გარეგან კლასის ნიმუშის გარეშე საჭიროებს გარეგან კლასის ნიმუშს
სტატიკური წევრები შეიძლება შეიცავდეს არ შეიძლება (გარდა კონსტანტების)