Java之接口的定义与实现举例

接口

接口与抽象类不同,它是一种规范,犹如USB、PCI接口规范一样。
接口与抽象类一样都不能创建实例,必须由接口的实现类完成对象的创建工作。
接口与抽象类的区别如下:

  1. 接口的数据成员必须是静态常量;抽象类可以有非常量的数据成员。
  2. 抽象类在体现父子继承关系时,是“is-a”的关系,即父类与子类在本质上是应该 相同的;接口不要求实现类是本质上的相同,而是按照接口的规定实现契约,是 “like-a”的关系,一般而言接口很多用于系统对外部的扩展。
  3. 继承特性也不太一样:一个类只能实现一个抽象类,但可以实现多个接口。

接口的定义

语法格式如下

 [public]  interface  接口名称  [extends 父接口列表]{   
 	[public] [static] [final] 数据类型  常量名=常量; //定义常量   
 	[public] [abstract] 返回值类型  方法名称([参数列表])//定义抽象方法   
 	[public] static 返回值类型 方法名称([参数列表]){ //定义静态方法    
 		…  …   
 	}   
 	[public] default  返回值类型 方法名称([参数列表]){  //定义默认方法   
 		 …  …   
 	}  
 }  

五个关键点

  1. 数据成员是静态的,必须赋初值的,是作为一个常量的;
  2. 数据成员默认为 public static final;
  3. 抽象方法默认为 public abstract;
  4. 静态方法的修饰符static不能省略,默认方法的修饰符default不能省略;
  5. 接口中的成员都是public的。

接口的实现与引用

与抽象类一样,接口不能用于创建对象;要想创建接口的对象,必须使用接口的实现类。
语法如下:

class 类名称  implements 接口列表{
   … … 
}  

五点说明

  1. 如果实现接口的类不是抽象类,则该(实现)类必须实现接口中所有的抽象方法;
  2. 实现类在实现接口的抽象方法时,方法头必须与接口的方法头完全相同,否则就是 在定义一个新方法;
  3. 接口中的抽象方法都显式的或隐式的定义为public,在类的实现方法前必须显式的 使用public修饰符,否则系统将警告缩小了该方法的访问权限;
  4. 每个接口在编译时都会生成一个.class字节码文件;
  5. 接口类型是引用类型。
    举例
package ch08; 
interface IShape{  //编译完成后会产生一个名为Ishape.class文件  
	final double PI=3.14;  
	abstract double getArea();  
	abstract double getLength(); 
} 
class Circle implements IShape{ //编译完成后会产生一个名为 Circle.class文件  
	double radius;  
	public Circle(double r){   
		radius=r;  
	}  
	public double getArea(){   
		return PI*radius*radius;  
	}  
	public double getLength(){   
		return 2*PI*radius;  
	} 
} 
class Rectangle implements IShape{ //编译完成后会产生一个名为 Rectangle.class文件  
	private double width;  
	private double height;  
	public Rectangle(double width,double height){   
		this.width=width;   
		this.height=height;  
	}  
	public double getArea(){   
		return width*height;  
	}  
	public double getLength(){   
		return 2*(width+height);  
	} 
} 
public class Demo{ //编译完成后会产生一个名为 Demo.class文件  
	public static void main(String[] args){   
		IShape circle=new Circle(5.0); //用接口的实现类创建接口对象   
		System.out.println("PI="+IShape.PI);  //接口的静态常量直接用接口调用   
		System.out.print("圆面积="+circle.getArea());   
		System.out.println(";周长="+circle.getLength());   
		Rectangle rect =new Rectangle(6.5,10.8);   
		System.out.print("矩形面积="+rect.getArea());   
		System.out.println(";周长="+rect.getLength());  
	} 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unknown To Known

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值