-
概念
接口interface:接口(Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合 -
格式
使用interface来进行声明,使用implements来实现接口
//接口模板
public interface InterfaceName{
public abstract void Act();
}
//一个类实现接口模板,多个接口使用逗号隔开
public class ClassName implements Interface01,Interface02,[...] {
...
}
//一种常用模式模板
public class ZiLei extends ChouXiangLei implements InterfaceXX,InterfaceXXX{
...
}
-
特点
1.成员变量:只能是public static final修饰,public static final [数据类型] [变量] = 值;
2.成员方法:只能是public abstract修饰,并且接口中所有的方法不能有具体的实现;
3.接口不可以创建对象,必须要实现类进行重写其抽象方法; -
类和接口的简单区别
1.类和类:相互之间只支持 单继承,一个子类只能继承一个父类;
classB Extends classA
2.接口和接口:支持多继承,一个子接口可以继承多个父接口;(区别多层继承和多继承)
Interface3 Extends Interface0, Interface1, interface……
3.类和接口:类 实现(implements)接口,一个类可以实现多个接口;
Class A implements Interface0,Interface01,interface……
思考:为什么类不允许多继承?
如果A同时继承B和C,而B和C同时有一个相同的D()方法,A如何决定该继承那一个呢?
但接口不存在这样的问题,接口全都是抽象方法继承谁都无所谓,所以接口可以继承多个接口。
关于接口继承详细内容可参考:http://www.cnblogs.com/littlepanpc/p/3616300.html
-
抽象类和接口的语法区别
1.抽象类可以提供成员方法实现细节,接口只能包含public abstract的抽象方法;
2.抽象类可以包含各种成员变量,接口只能是默认隐藏的public static final修饰的成员变量;
3.抽象类可以包含静态代码块和静态方法,而接口中不能含有静态代码块以及静态方法;
4.一个类只能继承一个抽象类,而一个类却可以实现多个接口(接口弥补了java的单继承); -
抽象类和接口的设计思想区别
1.抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
2.抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。
思考:为什么有时会用抽象类来实现接口?
在java一般的用法中,如果要用普通类来实现接口,则必须实现该接口中的所有方法,这样就会导致需要实现多余的方法;
但是抽象类实现接口,可以完全覆盖/重写 接口中的方法,也可只重写接口中的某几个方法(此时重写的方法体为空),子类再继承抽象类时,子类重写的方法即为抽象类中未重写接口中的方法,就可以针对性的实现接口中的方法;
//测试的接口
public interface InterfaceTest {
public abstract void add();
public abstract void minus();
public abstract void divide();
//如果使用下面的方法,SubTest必须需要重写此方法
// public abstract void multiply();
}
//测试的抽象类用来实现接口中部分方法
public abstract class AbstractTest implements InterfaceTest{
public void add() {}
public void minus() {}
}
//测试的子类用来继承抽象类
public class SubTest extends AbstractTest{
public void divide() {
System.out.println("除法运算");
}
// @Override
// public void multiply() {
// // TODO Auto-generated method stub
// System.out.println("乘法运算");
// }
}
//打印结果:除法运算
public class Show {
public static void main(String[] args) {
SubTest tt = new SubTest();
tt.divide();
}
}
- 常规应用
package com.jagger.InterfaceTry;
public class Show {
public static void main(String[] args) {
AirPlane F22 = new AirPlane();
F22.Fight();
}
}
public abstract class Flyer {
public abstract void fly();
}
public interface InterFight {
public abstract void Fight();
}
public class AirPlane extends Flyer implements InterFight {
public void fly() {
System.out.println("飞机喷气发动机飞行");
}
public void Fight() {
System.out.println("飞机进行战斗");
}
}
注意事项
1)一个类如果实现了一个接口,则要实现该接口的所有方法。方法的名字、返回类型、参数必须与接口中完全一致。如果方法的返回类型不是void,则方法体必须至少有一条return语句。
2)对于接口,里面的组成只有抽象方法和全局常量,所以很多时候为了书写简单,可以不用写public abstract 或者public static final(默认添加,注意不写也不是default),所以接口中的访问权限只有一种:public。在实现的时候一定要用public来修饰(否则默认为protected类型,缩小了方法的使用范围)。