Դաս 20.1։ Java – Inner classes

0

Method-local Inner Class

Java-ում մենք կարող ենք գրել դաս մեթոդի ներսում, և դա կլինի լոկալ տիպ: Ինչպես լոկալ փոփոխականները, ներքին դասի գործունեությունը սահմանափակվում է մեթոդով:

Method-local Inner Class-ը հնարավոր է ստեղծել միայն այն մեթոդի ներսում, որտեղ սահմանվում է ներքին դասը։ Հետևյալ ծրագիրը ցույց է տալիս, թե ինչպես օգտագործել Method-local Inner Class-ը։

Օրինակ՝

public class Outerclass {

// instance method of the outer class

void my_Method() {

int num = 23;

 

// method-local inner class

class MethodInner_Demo {

public void print() {

System.out.println(“This is method inner class “+num);

}

} // end of inner class

// Accessing the inner class

MethodInner_Demo inner = new MethodInner_Demo();

inner.print();

}

public static void main(String args[]) {

Outerclass outer = new Outerclass();

outer.my_Method();

}

}

 

Եթե գործարկեք վերը նշված ծրագիրը, ապա կստանաք հետևյալ արդյունքը։

 

Արդյունքը՝

This is method inner class 23

 

Anonymous Inner Class

Ներքին դասը, որը հայտարարվել է առանց դասի անվանման, հայտնի է որպես անանուն ներքին դաս՝ anonymous inner class: Անանուն ներքին դասերի դեպքում մենք հայտարարում և ստեղծում ենք դրանք միաժամանակ: Սովորաբար, դրանք օգտագործվում են այն ժամանակ, երբ անհրաժեշտ է անտեսել դասի կամ ինտերֆեյսի մեթոդը: Անանուն ներքին դասի շարահյուսությունը հետևյալն է՝

Syntax

AnonymousInner an_inner = new AnonymousInner() {

public void my_method() {

……..

……..

}

};

Հետևյալ ծրագիրը ցույց է տալիս, թե ինչպես կիրառել anonymous inner class-ը։

Օրինակ՝

abstract class AnonymousInner {

public abstract void mymethod();

}

 

public class Outer_class {

 

public static void main(String args[]) {

AnonymousInner inner = new AnonymousInner() {

public void mymethod() {

System.out.println(“This is an example of anonymous inner class”);

}

};

inner.mymethod();

}

}

 

Եթե գործարկեք վերը նշված ծրագիրը, ապա կստանաք հետևյալ արդյունքը։

Արդյունքը՝

This is an example of anonymous inner class

Anonymous Inner Class-ը, որպես Argument

Ընդհանրապես, եթե մեթոդն ընդունում է ինտերֆեյսի օբյեկտը, աբստրակտ դասը կամ կոնկրետ դասի օբյեկտ, ապա մենք կարող ենք ռեալիզացնել ինտերֆեյսը, ընդլայնել աբստրակտ դասը և փոխանցել օբյեկտը մեթոդին: Եթե այն դաս է, ապա մենք կարող ենք անմիջապես փոխանցել այն մեթոդին:

Սակայն այս երեք դեպքերում էլ, դուք կարող եք փոխանցել anonymous inner class-ը մեթոդին: Ահա, շարահյուսությունը՝

obj.my_Method(new My_Class() {

public void Do() {

…..

…..

}

});

Հետևյալ ծրագիրը ցույց է տալիս, թե ինչպես փոխանցել anonymous inner class-ը մեթոդին։

Օրինակ՝

// interface

interface Message {

String greet();

}

 

public class My_class {

// method which accepts the object of interface Message

public void displayMessage(Message m) {

System.out.println(m.greet() +

“, This is an example of anonymous inner class as an argument”);

}

 

public static void main(String args[]) {

// Instantiating the class

My_class obj = new My_class();

 

// Passing an anonymous inner class as an argument

obj.displayMessage(new Message() {

public String greet() {

return “Hello”;

}

});

}

}

Եթե գործարկեք վերը նշված ծրագիրը, ապա կստանաք հետևյալ արդյունքը։

Արդյունքը՝

Hello, This is an example of anonymous inner class as an argument

Static Nested Class

Ստատիկ ներքին դաս (static inner class) հանդիսանում է nested class, որը արտաքին դասի (outer class) ստատիկ անդամ է: Այն հասանելի է առանց այլ ստատիկ անդամներ օգտագործելով արտաքին դաս ստեղծելու: Ինչպես ստատիկ անդամները, այնպես էլ static nested classչունի մուտք դեպի արտաքին դասի փոփոխականներ (instance variables) և մեթոդներ: Static nested class-ը շարահյուսությունը հետևյալն է.

Syntax

class MyOuter {

static class Nested_Demo {

}

}

Static nested class-ի ստեղծումը մի փոքր տարբերվում է inner class-ի ստեղծումից։ Հետևյալ ծրագիրը ցույց է տալիս, թե ինչպես կիրառել static nested class-ը։

Օրինակ՝

public class Outer {

static class Nested_Demo {

public void my_method() {

System.out.println(“This is my nested class”);

}

}

public static void main(String args[]) {

Outer.Nested_Demo nested = new Outer.Nested_Demo();

nested.my_method();

}

}

Եթե գործարկեք վերը նշված ծրագիրը, ապա կստանաք հետևյալ արդյունքը։

Արդյունքը՝

This is my nested class

Հարգելի ընթերցող, խնդրում ենք չմոռանալ like տալ մեր ֆեյսբուքյան էջին, քանի որ նորությունների մեծ մասը առաջինը տեղադրվում է հենց այնտեղ։ Ինչպես նաև հետևեք մեզ այլ սոցիալական ցանցերում և, իհարկե, գրանցվեք մեր բլոգում։

Share.