[作业1]

------------------------------------

    使用抽象类和接口实现适配器模式设计。涉及的类和接口分别为ButtonListener(接口),

    其中含有click() / dbclick() / keyUp() / keyDown()等方法。

    ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现。

    Button类中添加addListener(ButtonListener l)方法。

[作业2]

------------------------------------

    阐述什么是多态。

    为什么函数可以覆盖,而属性不能覆盖?

--------------------------------------------------------------------------------------

1,

/**

     使用抽象类和接口实现适配器模式设计。涉及的类和接口分别为ButtonListener(接口),

    其中含有click() / dbclick() / keyUp() / keyDown()等方法。

    ButtonAdapter(按钮适配器类),适配器中对非click()方法进行默认实现。

    Button类中添加addListener(ButtonListener l)方法。 

 */

 //接口

 interface ButtonListener

 {

    void click();

    void dbclick();

    void keyUp();

    void keyDown();

 }

 //抽象类

 abstract class ButtonAdapter implements ButtonListener

 {

    public void dbclick()

    {

        System.out.println("OnDbclick");

    }

    public void keyUp()

    {

        System.out.println("OnKeyUp");

    }

    public void keyDown()

    {

        System.out.println("OnKeyDown");

    }    

 }

 //监听器具体实现

class MyListener extends ButtonAdapter

{

    public void click()

    {

        System.out.println("MyOnClick");

    }

}

//创建一个按钮,并添加监听器

 class Button

 {

    private ButtonListener blstr;

    public void addListener(ButtonListener blisten)

    {

        blstr = blisten; 

    }

    //模拟一个单击事件

    public void myClick()

    {

        blstr.click();

    }

    //模拟一个双击事件

    public void myDbClick()

    {

        blstr.dbclick();

    }

 }

 class ButtonAdapterDemo

 {

     public static void main(String[] args)

     {

         //创建一个监听器

         MyListener mylstr = new MyListener();

         //创建一个按钮

         Button bt = new Button();

         //添加一个监听器到按钮中

         bt.addListener(mylstr);

         bt.myClick();

         bt.myDbClick();

     }

 }

2,

[作业2]

------------------------------------

    阐述什么是多态。

    为什么函数可以覆盖,而属性不能覆盖?

1)多态是面向对象的一大特性,具体定义是指某一类事物的多种存在形态,例如猫,狗都属于动物这个类

我们可以这样创建猫对象:猫 x = new 猫(),也可以    动物 y = new 猫();

在面向对象编程中,对继承而言,多态就是父类的引用和子类的引用都可以指向子类对象;对接口而言,多态就是

接口引用指向具体实现类对象。

2)在java中,成员属性存放在堆内存当中,是具体实体,属于类的“资产”,保留着类的数据,我们在创建子类对象时,jvm会在

堆内存中创建该子类所继承的父类对象空间,用于保存父类的成员属性,并且让子类对象中的super成员指向父类对象空间,

子类属性保存在子类对象区当中。当我们建立父类引用指向子类对象时,该引用调用的属性是堆中父类对象的成员属性。

子类引用调用的是子类的成员属性。所以属性是类的资产,不能被覆盖。

而函数存在与方法区当中,虽然也是永久区,但是可以改变,并且不接收和存储数据。当需要调用函数时,会将函数压栈,

调用结束后弹栈,不会保留。所以子类可以覆盖父类的函数。