接口Alarm 中有 open()方法
Door里也有open()方法
要将两个open()方法分开,转成Alarm时调用的open()和作为Door的子类的open()两个方法不同。
解决方案: 创建一个内部类
Door里也有open()方法
要将两个open()方法分开,转成Alarm时调用的open()和作为Door的子类的open()两个方法不同。
解决方案: 创建一个内部类
/**
* 外部类 继承Door
* */
public class AlarmDoor extends Door{
public int i = 0 ;
/**
* 转成Alarm时 构建内部类
* */
public Alarm getAlarm()
{
return new MyDoor(this);
}
/**
* 转回AlarmDoor
* */
public static AlarmDoor getAlarmDoor(Alarm alarm)
{
return ((MyDoor)(alarm)).getAlarmDoor();
}
/**
* 重写Door类open()方法
* */
public void open()
{
System.out.println("Opening");
}
public void gogogo()
{
System.out.println("going");
}
public void count()
{
i++;
System.out.println(i);
}
/**
* 内部类实现接口
* */
private class MyDoor implements Alarm{
private AlarmDoor ad;
/**
* 重写Alarm接口open()方法
* */
public void open()
{
System.out.println("Alarming");
}
public MyDoor(AlarmDoor d)
{
this.ad = d;
}
public AlarmDoor getAlarmDoor()
{
return ad;
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
AlarmDoor ad = new AlarmDoor();
ad.open();
ad.gogogo();
ad.count();
//转成 Alarm接口
Alarm alarm = ad.getAlarm();
alarm.open();
//转回 AlarmDoor
ad = AlarmDoor.getAlarmDoor(alarm);
ad.count();
}
}