一.接口的概念
1.接口中可以规定方法的原型:方法名、参数列表以及返回类型,但不规定方法主体
2.也可以包含基本数据类型的数据成员,但它们都默认为static和final
二.接口的作用:
1.继承多个设计
2.建立类与类之间的"协议":将类根据其实现功能分组用接口代表,而不必顾虑它所在的类继承层次;这样可以最大限度的利用动态绑定,隐藏实现细节;
3.使用不同类之间的常量共享
三.接口的语法:
1.声明格式为:interface 接口名称 [extends 父接口名]{ .....//方法的原型声明或静态常量 }
2.接口的数据成员一定要有初值,但此值不能再更改,可以省略final关键字。
3.接口中的方法必须是"抽象方法",不能有方法体,可以省略public及abstract关键字.
栗子:接口声明
interface Shape2D //声明Shape2D接口
{
final double pi = 3.14; //数据成员一定要初始化
public abstract double area(); //抽象方法
}
interface Shape2D //允许省略一些关键字
{
double pi = 3.14;
double area();
}
四.实现接口:利用接口设计类的过程,称为接口的实现,使用implements关键字
语法:public class 类名 implements 接口名称{ ... //实现接口的方法 }
注意:必须实现接口中的所有方法,来自接口的方法必须声明成public
栗子:实现接口Shape2D
class Circle implements Shape2D
{
double radius;
public Circle(double r)
{
radius = r;
}
public double area()
{
return(pi*radius*radius);
}
}
class Rectangle implements Shape2D
{
int width,height;
public Rectangle(int w,int h)
{
width=w;height=h;
}
public double area()
{
return(width*height);
}
}
public class Test //接口测试类
{
public static void main(String[] args)
{
Rectangle rect = new Rectangle(5,6);
System.out.println("Area of rect = " + rect.area);
Circle cir = new Circle(5,6);
System.out.println("Area of cir = " + cir.area);
}
}
//运行结果:
// Area of rect = 30.0
// Area of cir = 12.56
栗子:接口类型的引用变量
public class Test
{
public static void main(String[] args)
{
Shape2D var1,var2; // 声明接口类型的变量 , 并用它来访问对象
var1 = new Rectangle(5,6);
System.out.println("Area of var1 = " + var1.area());
var2 = new Circle(2.0);
System.out.println("Area of var2 = " + var2.area());
}
}
//运行结果:
// Area of rect = 30.0
// Area of cir = 12.56
五.实现多个接口:通过这种机制可以实现对设计的多重继承
语法: [类修饰符] class 类名 implements 接口1,接口2.... {....}
栗子:通过实现接口达到多重继承
声明Circle类实现接口Shape2D和Color
Shape2D具有常量pi,area()方法用来计算面积;
Color则具有setColor方法,可用来赋值颜色;
通过实现这两个接口,Circle类得以同时拥有着两个接口的成员,达到了对设计进行多重继承的目的
interface Shpae2D //声明Shape2D接口
{
final double pi = 3.14; //数据成员一定要初始化
public abstract double area(); //抽象方法
}
interface Color
{
void setColor(String str); //抽象方法
}
class Circle implements Shape2D,Color
{
double radius;
String color;
public Circle(double r)
{
radius = r;
}
public double area() //实现area()方法
{
return(pi*radius*radius);
}
public void setColor(String str) //实现setColor()方法
{
color = str;
System.out.println("color="+color);
}
}
public class Test {
public static void main(String[] args)
{
Circle cir;
cir = new Circle(2.0);
cir.setColor("blue");
System.out.println("Area = "+ cir.area() ); //结果:color=blue Area=12.56
}
}
六.接口的扩展
1.实现一个接口的类也必须实现其超接口中的方法
2.接口扩展的语法
interface 子接口的名称 extends 超口的名称1,超口的名称2... { ... }
栗子:接口的扩展
interface Shape
{
double pi = 3.14;
void setColor(String str);
}
interface Shape2D extends Shape//声明Shape2D接口继承了Shape接口
{
double area();
}
class Circle implements Shape2D
{
double radius;
String color;
public Circle(double r)
{
radius = r;
}
public double area() //实现area()方法
{
return(pi*radius*radius);
}
public void setColor(String str) //实现setColor()方法
{
color = str;
System.out.println("color="+color);
}
}
public class Test
{
public static void main(String[] args)
{
Circle cir;
cir = new Circle(2.0);
cir.setColor("blue");
System.out.println("Area = "+ cir.area() ); //结果:color=blue Area=12.56
}
}