java接口实例化与扩展接口

问题引出:

今天在学习关于java网络抓包源码时候碰到这么一段:

 private PacketReceiver handler=new PacketReceiver(){
              public void receivePacket(Packet packet) {      //根据API  这是接口里面的唯一方法 
                   //  System.out.println(packet);  //对packet进行处理 根据API 每抓到一个包都会调用一次该方法 
                     frame.dealPacket(packet);
              }            
       };

查阅Jpcap API 后得知PacketReceiver是一个接口,其方法是receivePacket(Packet p) ,如图所示:



由于之前看到过接口不能实例化,因此引发了我的不解,上网查资料,有篇帖子解除了我的疑惑,在此搬来,谢谢该博主。

问题解答:

如题所示,这里有两个问题:

    1、java的接口能否实例化

    2、java如何去扩展一个接口

 

首先解决第一个问题,回答是:java接口不能直接实例化,不过有种方式看起来很像实例化,如下面代码所示:

01 interface TestNew {
02     void test();
03     void TestNew();//这个不是构造函数,只不过是和构造函数同名而已,有点最大的区别是:构造函数是没有返回值的,但是这里有返回值
04 }
05 public class TestNewInterface{
06     TestNew te = new TestNew(){
07         public void test() {
08             //必须实现TestNew接口中的方法
09         }
10         public void TestNew() {
11             //
12         }
13     };

 

上面这种方式也是比较常使用的,但是要注意一点,这样使用new一个接口的时候,必须将接口的所有方法都实现,比如上面的,必须将test()和TestNew()两个方法实现。

另外注意一点,接口中是没有构造函数这种说法的,上面的例子中虽然出现了和接口名一样的方法,但是他不是构造方法,有个明显的标志是,构造函数是没有返回值的,但是上面的方法中存在了void类型的返回值,所以可以判定,TestNew()方法不是构造方法,这一点也提示我们,在以后的编程中,尤其是接口一定要注意不要使用构造方法,同时在给方法命名的时候,要注意最好不要和接口名一样,虽然java编译器不认为这是种错误,但是很容易产生混淆。

==========================华丽的分割线=========================================

关于第二个问题:java如何去扩展一个接口呢? 答案是通过继承,这一点我刚开始不是很理解,我一直以为只有类是可以集成的,但是没有想到接口也可以继承,(可能我的知识不够充实^_^),下面有个例子可以做个参考:

 

01 interface Intface1{
02     void test01();
03 }
04 interface Intface2 extends Intface1{
05     void test02();
06 }
07
08 public class TestNewInterface implements Intface2{
09     public void test01(){}
10     public void test02(){}
11 }

注意在这时候,如上面的例子中的Intface2接口,如果实现这个接口的话,必须同时将Intface1接口中的方法给实现了,否则编译器会报错。

自己的总结:

   接口可以按照上述方法实例化,且可以作为函数的参数 ,如 jpcap中有这样两个方法:
我不知道这与接口回调有什么区别,关于接口回调我看了些资料不是很明白,希望能有人看到指点我一下。
 学生党自学java,希望能得到大家指点。
注:如果有人需要jpcap相关资料的话可以留言我,我有jpcap包,API和相关论文。 


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值