1.接口
接口的定义
定义接口的关键字:interface
格式:
public interface 接口 extends 接口,...(可以继承多个接口) {
//定义常量
public static final 数据类型 常量名 = 值;
//定义抽象方法
public abstract 返回值数据类型 方法名(数据类型 参数名,...);
}
注意:
1.接口不能实例化对象(因为其没有构造函数);
2.接口中只有一种访问修饰符就是public;
3.接口默认提供public、static、final、abstract关键字。
final关键字的作用:
1、被final修饰的类不可以被继承
2、被final修饰的方法不可以被重写
3、被final修饰的变量不可以被改变
重点就是第三句。被final修饰的变量不可以被改变,什么不可以被改变呢,是变量的引用?还是变量里面的内容?还是两者都不可以被改变?
举个例子:
public class FinalString
{
private String str;
public FinalString(String str)
{
this.str = str;
}
public String getStr()
{
return str;
}
public void setStr(String str)
{
this.str = str;
}
}
public class Test
{
public static void main(String[] args)
{
final FinalString fs = new FinalString("1");
fs.setStr("2");
System.out.println(fs.getStr());
}
}
运行没有问题。
让我们稍微修改一下:
public static void main(String[] args)
{
final FinalString fs = new FinalString("1");
final FinalString fss = new FinalString("333");
fs = fss;
}
第7行报错了,“The final local variable fs cannot be assigned”。可见,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的。
接口的实现(继承)
类实现(继承)接口的关键字:implements
格式:
public class 类名 extends 类名|抽象类名 implements 接口,... {
}
注意:类实现(继承)接口后,类必须要实现(方法重写)接口中所有的(接口的,接口的父接口)抽象方法。
1.1为什么我们需要接口?
1.类的继承是单继承,有了接口就可以让类拥有多个父类(父接口)。
2.强制要求子类必须要重写抽象方法,不重写就会报错(在团队开发过程中)。
2.抽象类
定义抽象类的关键字:abstract class
格式:
public abstract class 抽象类名 extends 类名|抽象类 implements 接口,... {
能定义类中所有的内容
也能定义接口中所有的内容
}
抽象类和接口一样不能实例化对象。
接口、抽象类和类有什么关系呢?
抽象类是介于接口和类之间的一种特殊类。
接口也是一种特殊类。
3.事件监听机制
需要三个组件(时间源对象,事件监听方法、事件接口)
事件源对象
只有组件才可以成为事件源对象。
3.1如果在一个图形界面上面有很多的组件,如何确定谁是事件源对象呢?
你的动作决定事件源对象(动作的承受对象)。
你在哪一个组件上发生动作,然后还需要有相应的操作,那这个组件就是事件源对象。
事件监听方法
捕获事件源对象上的动作,收集事件源对象的信息和动作信息,然后将这些信息交给事件接口(事件处理者)进行处理。
事件监听方法是由事件源对象提供的,事件监听方法名基本格式:add**Listener(**Listener l)。
事件接口(事件处理者)
事件接口的对象拿到信息后,会根据动作信息,去调用对应的事件处理方法,执行方法中的代码。
事件接口是由事件监听方法决定,它是**Listener。
事件监听机制举例见博客画板的实现。。。。