Junior
Ի՞նչ են ներքին դասերը։
sobes.tech AI
Պատասխան AI-ից
Ներքաշված դասերը (nested classes) այն դասերն են, որոնք հայտարարվում են այլ դասի ներսում: Դրանք կարող են լինել ստատիկ (static nested classes) կամ ոչ ստատիկ (inner classes):
Ստատիկ ներքաշված դասեր:
- Հայտարարվում են
staticմոդիֆիկատորով: - Չեն ունենա ուղիղ մուտք արտաքին դասի ոչ ստատիկ անդամներին (միայն արտաքին դասի օրինակով):
- Կարող են պարունակել ինչպես ստատիկ, այնպես էլ ոչ ստատիկ անդամներ:
- Ստեղծվում են առանց արտաքին դասի օրինակ ունենալու:
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public static class StaticNested {
// Մուտք ունի staticOuterVar-ին
public void printStaticValue() {
System.out.println(staticOuterVar);
}
// Ուղիղ մուտք չունի instanceOuterVar-ին
// public void printInstanceValue() {
// System.out.println(instanceOuterVar); // Կոմպիլյացիոն սխալ
// }
}
}
Օգտագործում՝
// Ստատիկ ներքաշված դասի օրինակ ստեղծելու համար
Outer.StaticNested nestedObject = new Outer.StaticNested();
nestedObject.printStaticValue(); // Տպել 10
Ներքաշված ոչ ստատիկ դասեր (Inner Classes):
- Հայտարարվում են առանց
staticմոդիֆիկատորի: - Ունեն ամբողջական մուտք դեպի արտաքին դասի բոլոր անդամներ, ներառյալ՝ մասնավորները:
- Չեն կարող պարունակել ստատիկ անդամներ (բացառությամբ կոնստանտների):
- Դրանք ստեղծելու համար անհրաժեշտ է արտաքին դասի օրինակ:
public class Outer {
private static int staticOuterVar = 10;
private int instanceOuterVar = 20;
public class Inner {
// Մուտք ունի staticOuterVar և instanceOuterVar
public void printValues() {
System.out.println(staticOuterVar); // Մուտք ունի
System.out.println(instanceOuterVar); // Մուտք ունի
}
}
}
Ներքաշված ոչ ստատիկ դասի օրինակ ստեղծելու:
// Օրինակ՝ արտաքին դասի օրինակ ստեղծելով
Outer outerObject = new Outer();
Outer.Inner innerObject = outerObject.new Inner();
innerObject.printValues(); // Տպել 10 և 20
Ներքաշված դասերի օգտագործման առավելությունները:
- Հոգեկան խմբավորում: Միայն մեկ այլ դասով օգտագործվող դասերը կարելի է տրամաբանականորեն խմբավորել ներսում:
- Զտում և թաքցում: Ներքաշված դասերը ունեն մուտք դեպի արտաքին դասի մասնավոր անդամներ:
- Կոդի ընթեռնելիություն և սպասարկում: Կոդը ավելի կազմակերպված է:
Ներքաշված ոչ ստատիկ դասերի տեսակները:
- Տեղական դասեր: Դեկլարարվում են մեթոդի ներսում:
- Անանուն դասեր: Անուն չունեցող դասեր, որոնք սովորաբար օգտագործվում են՝
- Աբստրակտ դասի, ինտերֆեյսի կամ բազային դասի օրինակ ստեղծելու համար՝ մեթոդների վերագրումներով:
Տեղական դաս:
public class Outer {
public void myMethod() {
class LocalClass {
void display() {
System.out.println("Տեղական դասի ներսում");
}
}
LocalClass local = new LocalClass();
local.display();
}
}
Անանուն դաս (մոդելի հետ ինտերֆեյսի):
interface Greeting {
void sayHello();
}
public class Outer {
public void greet() {
Greeting anonymousGreeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Ողջույն անանուն դասից!");
}
};
anonymousGreeting.sayHello();
}
}