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
本人研究较浅,思维也不够严谨,文章主要用于自己存档和供新手们了解。若您发现有什么问题,欢迎评论指正,谢谢!