Anonymous inner class คือ inner class ที่ประกาศ โดยไม่มีชื่อคลาสเลย กล่าวคือ inner class ที่ไม่มีชื่อ เนื่องจากไม่มีชื่อ จึงไม่สามารถมี constructor ได้ เนื่องจากเรารู้ว่าชื่อ constructor ต้องเหมือนชื่อคลาส
เราสามารถกำหนด anonymous inner class และสร้างออบเจ็กต์ของมันโดยใช้ operator new พร้อมกันในขั้นตอนเดียว
Syntax
new(argument-list){
// Anonymous class body
}
ประเภทของ Anonymous Inner Class ใน Java
- Anonymous inner class ที่ extends คลาส
- Anonymous inner class ที่ implements interface
- Anonymous inner class เป็น argument
Anonymous inner class ที่ extends คลาส
ที่นี่ใช้ keyword new เพื่อสร้างออบเจ็กต์ของ anonymous inner class ที่มี reference ของ parent class type
ตัวอย่าง
class Car {
public void engineType() {
System.out.println("Turbo Engine");
}
}
public class AnonymousClassDemo {
public static void main(String args[]) {
Car c1 = new Car();
c1.engineType();
Car c2 = new Car() {
@Override
public void engineType() {
System.out.println("V2 Engine");
}
};
c2.engineType();
}
}
ผลลัพธ์
Turbo Engine V2 Engine
Anonymous inner class ที่ implements interface
ที่นี่ใช้ keyword new เพื่อสร้างออบเจ็กต์ของ anonymous inner class ที่มี reference ของ interface type
ตัวอย่าง
interface Software {
public void develop();
}
public class AnonymousClassDemo1 {
public static void main(String args[]) {
Software s = new Software() {
@Override
public void develop() {
System.out.println("Software Developed in Java");
}
};
s.develop();
System.out.println(s.getClass().getName());
}
}
ผลลัพธ์
Software Developed in Java AnonymousClassDemo1$1
Anonymous inner class เป็น argument
เราสามารถใช้ anonymous inner class เป็น argument เพื่อให้สามารถ ส่งต่อให้เมธอดหรือคอนสตรัคเตอร์
ตัวอย่าง
abstract class Engine {
public abstract void engineType();
}
class Vehicle {
public void transport(Engine e) {
e.engineType();
}
}
public class AnonymousInnerClassDemo2 {
public static void main(String args[]) {
Vehicle v = new Vehicle();
v.transport(new Engine() {
@Override
public void engineType() {
System.out.println("Turbo Engine");
}
});
}
}
ผลลัพธ์
Turbo Engine