1,使用抽象类和接口实现适配器模式设计。涉及的类和接口分别为ButtonListener(接口),ide
其中含有click() / dbclick() / keyUp() / keyDown()等方法。函数
ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现。this
Button类中添加addListener(ButtonListener l)方法。spa
//按钮监听器接口设计
interface ButtonListener {orm
public void onClick(); // 单击事件对象
public void onDbclick(); // 双击事件继承
public void onKeyDown(); // 按键按下接口
public void onKeyUp(); // 按键释放事件
}
// 按钮监听器适配器
abstract class ButtonAdapter implements ButtonListener {
public void onDbclick() {//抽象类,适配器空实现,还有一个onClick()没有实现
}
public void onKeyUp() {
}
public void onKeyDown() {
}
}
class MyListener extends ButtonAdapter {
public void onClick() {
System.out.println("i click one !");
}
}
class YourListener extends ButtonAdapter {
public void onClick() {
System.out.println("you click one !");
}
}
// 按钮
class Button {
// 按钮的监听器
private ButtonListener listener;//按钮的处理程序就是这个listener,把上面的接口定义为了按钮的成员(按钮是有这些属性的)
// 添加监听器
public void addListener(ButtonListener lsn) {
this.listener = lsn;
}
// 模拟单击事件
public void click() {
// 处理单击事件
listener.onClick();//找到单击事件的处理方法,调用监听器的onClick方法,on指的是什么事件发生时
}
// 模拟双击事件
public void dbClick() {
listener.onDbclick();
}
}
class AdapterDemo {
public static void main(String[] args) {
// button1
Button btn1 = new Button();
MyListener l = new MyListener();
btn1.addListener(l);
btn1.click();
// button2
Button btn2 = new Button();
YourListener yl = new YourListener();
// btn2.addListener(yl);
// btn2.click();
//还能够这样写
btn2.addListener(new ButtonAdapter(){//关键,匿名内部类对象
public void onClick() {
System.out.println("you click one !除了上面常规的,还能够用匿名内部类对象");
}
});
btn2.click();
}
}
2,阐述什么是多态。为何函数能够覆盖,而属性不能覆盖?
(1)多态:某一类事物的多种存在形态。对于接口来讲,可使用接口引用实现了该接口的类所建立的对象;对于继承来讲,是使用父类类型来引用子类的对象。
(2)属性是资产,是容纳数据的地方,函数是行为,不容纳和存储数据,因此函数能够被覆盖,而属性不能。