Java学习:接口

1、接口是什么

接口不是类,它类似于包头,只需要写方法名和参数

public interface MessageListener {         
    public void onMessage(Message paramMessage);        
}
  • 接口没有构造方法
  • 接口及其方法均隐式抽象,不必使用abstract关键字
  • 接口的方法都是public类型
  • 接口定义的变量自动为public static final,可以通过类命名直接访问:ImplementClass.name
  • 接口可以被声明,不可被new实例化(实现类才可以被new)
    声明后叫做接口变量,初始化为new实现类叫做引用(接口变量引用了实现类的对象)
class Parents implements Person(){...}
Person p=new Parents();
  • 可以使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。
2、实现类

实现类类似包体,包含了对入参的具体操作,一般都是用来给别人调用

public class ReceiveMessageListener implements MessageListener {  
    public void onMessage(Message message) {
        if (message instanceof TextMessage) {
            TextMessage text = (TextMessage) message;
            try {
                setMsg_aa(msg_aa + text.getText());
                LOG.info("Received message:" + text.getText());
                System.out.println(text.getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
 }
  • 类实现接口时,需要实现接口所有的方法,除非是抽象类(交给抽象类的子类去做)
  • 一个可以同时实现多个接口,间接实现了多继承(比如鸟可以同时实现fly和eat两个接口)
3、接口的继承

  接口可以继承接口,方式跟类一样,但子接口的实现类需要把父、子接口声明的方法都实现

  • 接口可以同时继承多个接口(多重继承),父接口之间用逗号分隔(切记避免方法名重复
    public interface MessageListener extends ListenerA,ListenerB{}
4、标记接口

  标记接口是没有任何方法的接口

  • 作为一个公共的父接口,Java虚拟机(JVM)就知道该接口将要被用于做哪些事情。
  • 实现此接口的类不需要实现任何方法,但是该类通过多态性变成一个接口类型(不是很懂)
5、接口和抽象类
  • 设计理念上,抽象类所代表的是“is-a”的关系,是对类抽象;而接口所代表的是“like-a”的关系,是对行为的描述。如:猫和狗都是动物,都具有叫的能力,可以抽象出一个动物类,具有“叫”的方法(抽象类);鸟和飞机都可以飞,可以写一个fly的接口,具备“飞”的行为(接口)。
  • 设计层次上,抽象类是自底向上抽象而来的(子类具有共同的方法,由此抽象出抽象类);接口是自顶向下设计出来的(不需要知道子类存在,只需要定义一个规则)
    实例
6、实例
import java.lang.*;
 interface Common {
      double runTimer(doublea, double b, double c);
           String getName(); //获取交通工具的名称
}

 class Plane implements Common  {
      public doublerunTimer(double a, double b, double c)  {
            return (a+ b + c);
      }
      public String getName(){
            return"Plane";
      }
}
 class Car implements Common {
      public doublerunTimer(double a, double b, double c) {
            return ( a*b/c );
      }
      public String getName(){
            return"Car";
      }
}

public class ComputeTime {

      public static void main(String args[])  {
            double A=3;
            double B=5;
            double C=6;
            double v,t;

            Common d=new Car();
            v=d.runTimer(A,B,C);
            t=1000/v;
            System.out.println(d.getName()+"的平均速度: "+v+" km/h");
            System.out.println(d.getName()+"的运行时间:"+t+" 小时");

            d=new Plane();
            v=d.runTimer(10,30,40);
            t=1000/v;
            System.out.println(d.getName()+"的平均速度: "+v+" km/h");
            System.out.println(d.getName()+"的运行时间:"+t+" 小时");
      }
}

  参考文献:
  http://c.biancheng.net/cpp/html/1751.html
  http://blog.csdn.net/chenssy/article/details/12858267
  http://blog.csdn.net/chenssy/article/details/12858267
  
  本人研究较浅,思维也不够严谨,文章主要用于自己存档和供新手们了解。若您发现有什么问题,欢迎评论指正,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值