本系列博客汇总在这里:Java系列_汇总
一、什么是接口
-
当一个抽象类中的所有方法都是抽象的,那么我们就可以把它定义为一个接口,接口是对行为的抽象;抽象类是对属性和行为的抽象。
-
接口定义的只是一种规范,是一种行为的抽象,就是说我给你定义好方法名,返回值类型,参数类型及个数。我不管怎么实现,到类里边才具体实现。
-
语法
interface 接口名 { 方法的定义; }
-
示例
interface TeacherService { //在接口中每一个方法的定义都是抽象的,可以省略abstract public void teaching();//抽象方法 public void eating();//抽象方法 //在接口中定义的都是常量 //int AGE = 8;应该写为如下: public final static int AGE = 8; //接口同抽象类相似,接口中的方法不能和private,static,final共存 //private void eating();错误 //public final void eating();错误 //public static void eating();错误 }
class JavaTeacher implements TeacherService { public void teaching() { System.out.println("张三在上课"); } public void eating() { System.out.println("李四在吃东西"); } }
class Welcome { public static void main(String[] args) { JavaTeacher jt = new JavaTeacher(); jt.teaching(); jt.eating(); System.out.println("--------------------通过实例来访问-----------------------------"); System.out.println(jt.AGE); System.out.println("--------------------通过接口名来访问-----------------------------"); System.out.println(TeacherService.AGE); } }
-
接口中可以定义属性(常量),可以通过接口来实现类的实例来访问,还可以通过接口名来访问(推荐使用), 接口中的属性不能修改,我们接口中的属性默认都是使用final static修饰的 。通常在接口中来定义属性把它作为常量,常量的名字规范是单词大写。而且多个单词之间用下划线俩分隔。比如:PI。
-
接口可以继承接口(单继承和多继承,多级继承)。
二、接口的继承和实现
- 示例
//定义接口A interface A { public void method(); } //定义接口B interface B { public void method1(); } //定义接口C继承于A interface C extends A { public void method2(); } //定义接口D继承于C interface D extends C { } //定义类Test实现接口DB class Test implements D,B { //由于C继承A,D又继承C,所以在实现接口D的时候,就需要实现接口ADC里面的所有抽象方法;B单独处理 public void method() { } public void method1() { } public void method2() { } } //主类 class Welcome { public static void main(String[] args) { } }
三、接口的应用
- 范例:使用接口方式计算圆和正方形的面积和周长,见程序需要透彻理解!
//定义接口CalInter interface CalInter { /* *定义计算面积的方法 */ public double getArea(double r); /* *定义计算周长的方法 */ public double getLength(double r); /* *定义圆周率常量 */ public final static double PI = 3.14; } //使用类Circle实现接口CalInter class Circle implements CalInter { /** *定义圆的属性半径 */ private double r; /** *定义圆有参数的构造器 */ public Circle(double r) { this.r = r; } /** *提供一个对外访问r的方法 */ public double getR() { return r; } /** * 实现接口的所有方法 */ public double getArea(double r) { return r*r*CalInter.PI; } public double getLength(double r) { return 2*r*CalInter.PI; } } //主类 class Welcome { public static void main(String[] args) { Circle c = new Circle(2); //获得半径 double r = c.getR(); //计算面积 double area = c.getArea(r); double length = c.getLength(r); System.out.println("半径是"+r+"的圆的面积是"+area); System.out.println("半径是"+r+"的圆的周长是"+length); } }
四、接口的好处
- 接口定义的是一种标准,可以使我们的代码分层开发,分模块开发。
- 降低代码的耦合度,提高代码的可扩展性和可维护性。
- 接口改进的单继承的局限性。
五、接口和抽象类的区别
- 接口的所有方法都是抽象的,抽象类里面的方法可以是抽象的也可以是不抽象的。
- 接口和抽象类都不能实例化,接口需要类来实现后实例化实现类,抽象类需要类来继承后实例化子类。
- 抽象类只能单继承,接口可以多继承接口(jdk1.7),接口还可以多实现。
- 接口中的属性是 static final 类型的,抽象类中的属性跟普通类中的属性没有区别。
- 接口中的方法默认就是抽象的不需要加 abstract,抽象类中的抽象方法需要加 abstract 关键字。
如有错误,欢迎指正!