接口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();
}
}
本文介绍了一种通过创建内部类来解决方法名称冲突的问题。在AlarmDoor类中,Door类的open()方法与Alarm接口的open()方法名称相同,通过内部类MyDoor实现了Alarm接口,并重写了open()方法,使得在不同上下文中可以区分调用。
1205

被折叠的 条评论
为什么被折叠?



