一、接口的定义
如果一个抽象类中的所有方法都是抽象的,我们就可以将这个类用另外一种方式来定义,也就是接口定义。接口是抽象方法和常量值的定义的集合,从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
在Java中,定义一个接口的形式如下:
[public] interface InterfaceName [extends SuperInterName] { .....//常量定义和抽象方法定义 }接口中定义的属性必须是public static final变量,而定义的方法必须是public abstract方法,因此这些修饰符可以部分或者全部省略。
二、接口的用法
1、接口中定义的属性的值在实现类中不能被更改。
/* 接口中定义的属性的值在实现类中不能被更改 接口的属性是public static final 类型 */ //接口中是不可以定义构造函数的 interface It { int i = 10; //不能改为 int i; } class A implements It { public A(int j) { //this.i = j; // 接口It中的属性i 是public static final 类型,不可以在实现类中被改变 } } class TestInter_1 { public static void main(String[] args) { A aa = new A(10); System.out.println("aa.i = " + aa.i); System.out.println("aa.i = " + A.i); } }
2、一个类只能实现某个接口,不能继承某个接口。
3、接口可以继承接口,而且可以继承多个接口,即接口允许多继承。
4、如果一个类只实现了一个接口的部分方法,则该类必须声明为抽象类。因为如果一个类只是实现了接口的部分方法,而接口的其他方法还是抽象方法,所以这个类还一定包含抽象方法,因此要声明为抽象类。
5、一个类要想实现某个接口中方法时,该方法必须声明为public。因为接口的方法都是public abstract类型的。
6、一个类可以在继承一个父类的同时实现一个或多个接口,但extends关键字必须的在implements 之前。
class A { } interface It1 { } interface It2 { } //接口可以多重继承,即一个接口可以有多个父接口,但是一个类只能有一个父类,Java类不允许多继承,接口却允许多继承 interface It3 extends It1, It2 { } interface It4 { int i = 20; } //一个类可以在继承一个父类的同时实现一个或多个接口,但extends关键字必须的在implements 之前 class T extends A implements It4,It3 { } class TestInter_2 { public static void main(String[] args) { System.out.println("嘿嘿!"); } }7、不可以new接口对象,但可以定义一个接口引用类型的变量并将其指向实现接口的对象,达到多态的目的。
interface It { void f(); } class A implements It { public void f() //必须声明为public类型 { System.out.printf("AAAAA "); } } public class TestInter_1 { public static void main(String[] args) { //It it = new It(); //error It it = new A(); it.f(); //实现多态 } }
1、接口中的方法只能是抽象方法,而抽象类中可以有非抽象方法的方法成员。
2、Java中类(包括抽象类)不允许多继承,而接口却允许多继承。