本系列博客汇总在这里: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 关键字。
如有错误,欢迎指正!