Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Java มี anonymous inner class กี่ประเภท?

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