接口和事件机制

接口,什么是接口?为什么要使用接口呢?它与我们所熟悉的类有什么不同?问其优点,又有哪些呢?下面我们就先来谈谈接口。
1首先我们先来看接口的定义格式:
public interface 接口名{


}
这里我们用到的关键字不在是类关键字,而是接口的关键字interface.因为上节课刚刚讲到了继承,所以我一起把继承的格式一块写下来:
⑴接口继承接口:

public interface 接口名extends 接口名{


}

⑵类继承接口

public class 类名 implements 接口名...{


} //这里需要注意的是,类是可以继承多个接口的


⑶类继承类或抽象类再继承接口

public class 类名 类或抽象类 extends implements 接口名... {


}


⑷那么接口能不能继承类呢?答案是不能的!!!


2看完了定义的格式我们肯定已经看到不少类和接口的区别了吧,当然这只是一小部分了,除了继承的区别,最主要的就是定义属性和方法的区别,这也是我们需要特别注意并且以后是要常常借用的地方!

①定义属性的区别:首先,要说明的是,类中有四个访问修饰符(private 默认 protected public),而在接口中只有一个访问修饰符,那就是public .
在接口中我们是只可以定义常量!这也是我刚刚才得知的。为什么呢?我觉得这个论坛上有个人的思维确实很不错,我们不知道为什么,但是假设一下,如果接口中定义了变量会怎么样???这个问题请在这里先留着,下面会做解答。
定义常量的格式:
public static final 数据类型 常量名=值;
static final 数据类型 常量名=值;
数据类型 常量名=值;
为什么能这样呢?因为接口中默认的修饰符是public,同样,static final也是默认的。


②定义抽象方法(特别要说一下,为什么是抽象方法呢?因为接口中的方法不需要写方法体,即没有{})
public abstract 返回值数据类型 方法名(数据类型 参数名);
public 返回值数据类型 方法名(数据类型 参数名);
返回值数据类型 方法名(数据类型 参数名);

为什么可以这样写,答案同上。


3那么,我们为什么要定义抽象类方法?它和普通方法有什么不同呢?
首先我们是知道的,抽象类方法是没有方法体的,除此之外,如果一个类继承了接口,那么就必须实现它所有的抽象方法。即重写。为什么要这样呢?借用别人的一句话,接口就是一个契约。我们知道在做庞大的变成任务时,我们是无法一个人完成的,我们需要好几个人的合作,但是我们知道,每个人的编程习惯是不同的,所以,如果没有一个固定的要求,就会变出五花八门的参量等,那么整合起来是很麻烦的,所以就必须有一个限制要求,这就是我们使用的接口,就是统一我们的编程习惯,好,现在再回到上述问题,如果接口中能定义变量,那么,接口对于编程来说还有什么意义呢,这种统一性就消失了不是吗?
有时候又会出现这样的问题,如果一个接口中抽象方法太多,而我又不想实现所有的抽象方法怎么办呢?很简单,加一对{},把它变成普通方法就可以咯。

4什么是抽象类?抽象类就是介于类和抽象类之间的一种特殊的类。类是可以构造方法的,而接口是没有构造方法的,当然抽象类中可以有构造方法,我之所以说这个事因为我想说,接口和抽象类是不壸实例化对象的。接口不能实例化对象很容易理解,因为它当中没有构造方法。那么为什么抽象类也不可以呢?引用一下别人的话:(学过汇编你会知道,程序都有一个代码段,再内存中需要占据一定的内存,而抽象类没有具体的实现方法,无法具体的给它分配内存空间,所以为了安全,不JAVA不允许抽象类,接口直接实例化)其实我们看,接口中的抽象方法都是没有方法体的,如果我们实例化了一个抽象类去调用一个抽象方法有什么意义呢?具体又不能实现。

5总结到这里,接口就差不多了,还有要记住,在继承接口的时候,类是可以继承所有接口的抽象方法的,所以在类中实现这些抽象方法的时候千万不要漏掉了哦。


接下来说一说事件机制。


1事件源,可以成为事件源的有什么呢?老师讲了:Java中所有的图形界面容器或者元素组件对象都可以成为事件源对象。如何确定哪一个是事件源对象?你的动作发生在哪一个组件对象上,那么该组件对象就是事件源对象。
2事件监听的方法,我这里不一一介绍,因为只有通过实例才能更加了解。当然我发现一个好玩的事情就是,原来我的手机一直处于监听状态啊,哈哈哈。。。
3好吧,其实我想说的也不是这些,我想说的是用QQ界面的登陆实现来探讨一下其中的一些东西。


我们在QQ登陆的时候,是要核对你的账号和密码是否匹配的。然后才会做出相应的回应。如果单独的问我,你怎么去核对你的账号和密码呢?想要核对就要得到。所以我就借用一个简单的例子来说一下:


Student stu=new Student();
stu.getname();

我深深的想了一下,我好想到昨天才意识到这个语句的真正含义,似乎是有点晚。只是把它当成了一个获取名字的方法确实不不知道为什么。stu对象名,存储了实例化对象的首地址,有了这个首地址,我们就可以去访问它里边的内容了,是吧。虽然是很简单的道理,但是如果真正运用起来还是有一定的想象空间的。所以如果我们要得到账号和密码,就要得到存储他们的首地址!!!

还有,特别想说一下的就是,我们要使用事件监听器方法来对事件是进行监听从而去处理,所以我们难免要用到接口里的抽象的事件监听方法,但是我们知道,接口是不能被实例化的,那么我们怎么调用接口里的方法呢?这就用到了类与接口的继承,我们可以实例化类里的对象,并且,类是可以调用接口里所有的抽象的方法的。。所以我们要建立一个类,用它去继承我们需要的接口(记得一定要在里边实现抽象方法哦,不然会报错的)。未完待续。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值