接口、抽象类、事件学习小结

接口、抽象类、事件学习总结
这一部分在JAVA中非常重要,我认为算是学好java的重要基石。因为之前没

怎么接触过编程语言,所以当时从学习这些到真正能熟练运用还是挺费劲的(也许是我

太笨了-_-|||)。好了废话不多说,现在我来分享一下我的学习心得,也算给自己总结

一下知识要点。

首先第一点,接口是什么?接口的作用?接口怎么使用?
1.接口是什么。在我看来,程序中的接口是由生活中类似的场景命名的。例如

插座,插座有插孔,用电器的插头插入插孔就有电,就能做不同的事情,这里插孔就是

接口,冰箱的插头可以通过它来取电,用于冰冻食物,电饭煲的插头也可以用它来取电

用于煮饭,吹风机,洗衣机等等都是一个个不同的对象,它们将插头插入插孔,就类似

与程序中的对象实现了接口。所以接口只是一些定义了常量或者抽象方法的类,它没有

具体实现,不同的对象可以通过实现接口来做不同的事。一个类只能继承一个类,但是

却可以实现多个接口。还是用之前的例子,例如我们常使用的全自动洗衣机,要让它能

工作仅仅有电是不可以的,还需要水,我们现在有了一个电的接口插孔,还需要另一个

接口接到水管。类似于这样的过程,一个类可以实现多个接口。
2.接口的作用。我在上一段中已经使用了例子阐述了什么是接口,其实接口的

作用也就不言而喻了,它只是一个空壳,只有抽象方法和常量,没有具体方法,它是供

给不同的对象使用的。很大程度上这也丰富了类的继承,因为java的机制就是只能继承

一个类嘛,现在我写了另一个类需要用到一些固定的方法,要么就自己写,要么就去继

承,可是父类里面如果没有,父类就得再去继承,这样一层一岑往上,很累有没有。况

且这种方法不仅仅是我写的这个类要用,很多很多类都要用,这样工程就太大了,弄一

个接口,供给很多类实现。简直就是很方便。
3.接口怎么使用。接口的定义格式为
public interface 接口名 extends 接口,... {
//定义常量,这三种格式都可以
public final static 数据类型 常量名 = 值;
final static 数据类型 常量名 = 值;
数据类型 常量名 = 值;

//定义抽象方法,同样是有三种方法
public abstract 返回值类型 方法名([数据类型 参数名,...]);
abstract 返回值类型 方法名([数据类型 参数名,...]);
返回值类型 方法名([数据类型 参数名,...]);
}

此处可以看出一个细节,就是接口可以继承多个接口。但其他的类只可以继承一个父类



定义了接口,接口的实现格式是
public class 类名 extends 类或者抽象类  implements 接口,... {

}


接口的基本知识就是以上这些,现在谈谈第二点,抽象类。那么什么是抽象类

?抽象类的作用是什么?怎么使用抽象类?
1.什么是抽象类。包含抽象方法的类叫做抽象类。这就是说,抽象类是一个普

通的类,有普通类可以做的定义属性和方法,但是只要里面有一个方法是抽象方法,这

个类就被称为是抽象类。而“抽象方法”属于一种不完整的方法,只含有一个声明,没

有方法主体。
2.抽象类的作用是什么。我们知道,在java中,所有的对象创建要在类里面

,就说所有的对象都是用类来描述的,但是反之,不是所有的类都要用来描述对象,例

如我们说人类怎样怎样,现在没有给“人类”赋值,没有给它创建一个对象,只是泛泛

地说,给“人类”这个抽象类定义一个“思考”的抽象方法,并不要求具体实现,也没

有给思考加一个特定的方法体。在这里抽象类的作用与接口很相似。但是区别还是有的

,后文将总结抽象类和接口的区别。
3.怎么使用抽象类。定义抽象类的格式:
public abstract class 抽象类名 extends 类或者抽象类  implements 接口,... {

//定义属性
//定义构造方法
//定义普通方法
//定义常量
//定义抽象方法
格式:
访问修饰符 abstract 返回值类型 方法名([数据类型 参数

名,...]);

}


第三点,类,抽象类与接口的区别。
1.首先不得不说,抽象类,接口都属于类。这里为了区分,就将类叫做普通类

。我认为抽象类是介于普通类和接口之间的存在。一个没有抽象方法,一个只有抽象方

法或者常量,中间的这个是既有抽象的,也有普通的。所以第一个区别就是定义的东西

不同。
2.继承的不同,普通类只可以继承一个类,实现多个接口,也可以被继承。抽

象类也同样只能继承一个类实现多个接口,但是它被继承的时候它的子类必须要给出它

所有的方法体,如果不给,那它的子类同样还是抽象类。接口可以继承多个接口。



第四点,事件。关于事件这一块,我学的时候总是很纠结传参的问题,后来经

过不断地对比和编程次数增多,也掌握了一些规律。
首先要明确事件源是什么,刚开始的时候我总是会把鼠标、键盘这些人为动作

发生的地方当做事件源,实际上事件源是指图形界面控件上发生动作的对象。例如我们

要在窗体上画画,则窗体就是事件源,关闭窗口,则关闭的按钮就是事件源。
总之事件源一定是在图形界面控件上的容器或者元素。
明确了事件源的概念,我们要给事件源加上监听器,一产生动作,监听器就能

监听到动作,就会调用相应的方法来产生反应。我们常用的监听器有:

ActionListener  MouseListener  MouseMoveListner  KeyListener
加方法只需在之前加一个add,在后面加一个括号带上参数就好。

在此我要说说传参了,例如现在我们创建了一个窗口JFrame1,在窗口上加了

一个按钮jbu,一按按钮就要画一条直线出来,那我们要给这个按钮添加监听器,发生

的动作是画画,然后我们定义了一个类继承这个JFrame1,实现ActionListener,取名

为DrawListener。
在JFrame1中:
// 给窗体添加一个开始的按钮
JButton jbu = new JButton("开始");
this.add(jbu);
this.setVisible(true);//设置窗体可见,注意要在窗体可见之后

//才能获取画笔

//调用画笔,给按钮添加监听器
Graphics g = this.getGraphics();
DrawListener draw = new DrawListener(g);
jbu.addActionListener(draw);


在DrawListener中:

private Graphics g;//先定义画笔对象

/*
* 构造方法,传递画笔参数,注意构造方法名必须和类名完全相同
*/
public DrawListener(Graphics g){
this.g=g;

}

public void actionPerformed(ActionEvent e) {

//方法体
}


所以传参是要干什么就传什么,要获取坐标,就应该传递窗体参数,要画画就传画笔参

数,要获取账号密码登录,就传账号输入内容和密码输入内容。构造方法的在创建对象

时就可以传参,普通方法要先创建对象,再调用方法传递参数。


以上都是我个人理解,在以后更多的编程和学习中,如果有理解错的或者还有

一些没有考虑到,会再来补充。