天天看點

Java 面向對象 之 匿名内部類 執行個體 2

http://www.verejava.com/?id=16992879139164
/**
    知識點: 匿名内部類

    題目: 機車上裝有警報器,當有人碰到機車時, 警報器發出報警響聲

    思路:
        1. 抽象出類:
            1.1 機車(Moto),報警器(Alarm), 人(Person)
        2. 找出類的關系:
            2.1 機車上裝有報警器  Alarm -> Moto(1對1)
            2.2 警報器有不同品牌的分類 Alarm
        3. 找出類屬性:
            3.1 Moto(品牌,報警器的引用)
            3.2 Alarm(品牌)
            3.3 Person(姓名)
        4. 找出類方法:
            4.1 機車上裝有報警器 Moto{load(Alarm alarm)}
            4.2 機車被人碰到 Moto{touched(Person p)}
            4.3 警報器發出響聲 Alarm{beep()}

*/

public class TestMoto3 {
    
    public static void main(String[] args) {
        //準備生産一台南方機車
        Moto moto = new Moto("南方");

        moto.load(new Alarm() {
            public void beep(Person p) {
                System.out.println(p.getName() + " 碰到了警報器 ");
            }
        });

        //這個時候李明過來了
        Person p = new Person("李明");
        //李明不小心碰到了機車, 機車發出了報警聲
        moto.touched(p);
    }
}

abstract class Alarm {
    //報警器能發出報警聲
    public abstract void beep(Person p);
}

class Moto {
    
    private String brand;//品牌
    private Alarm alarm;//報警器引用

    public Moto(String brand) {
        this.brand = brand;
    }

    //裝載警報器
    public void load(Alarm alarm) {
        this.alarm = alarm;
    }

    //機車被人碰到
    public void touched(Person p) {
        alarm.beep(p);
    }
}

class Person {
    
    private String name;//姓名

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

}