接口定义的是多个类共同的公共行为规范,这些行为是外部交流的通道,这就意味着接口里通常是定义一组公用方法。
定义接口不再使用class关键字,而是使用interface关键字。
【修饰符】 interface 接口名 extends 父接口1 , 父接口2...
{
零个到多个常量定义....
零个多多个抽象方法定义....
}
语法说明:
1、修饰符可以使public或省略,如果省略public默认采用包权限访问控制符,即只有在相同包结构下才可以访问该接口。
2、接口命名规则与类命名规则相同。
3、一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。
接口的继承和类继承不一样,揭露完全支持多继承,即一个接口可以有多个直接父接口。
接口不能用于创建实例,但接口可以用于声明引用类型的变量。接口的主要用途就是被实现类实现。
接口作为一种约定、规范或标准具有以下的显著特征:
- 接口不可以被实例化,不能有构造方法;
- 接口中的所有成员都是public static final;
- 接口中的方法都是抽象方法,接口中的方法会自动使用public abstract修饰,不能有方法体;
- 一个类可以同时实现多个接口;
- 实现类必须实现接口中的所有方法;
- 接口可以继承接口。
示例一:
设计USB接口,可以实现PC的USB接口连接U盘和鼠标。
分析:首先定义一个USB接口,然后分别设计一个U盘和鼠标类,接着创建一个PC的对象,最后创建Main方法。
/*------------------------------------------定义USB接口---------------------------------------*/
public interface USB
{
int width=2;
int height=3;
public void swapdata();
}
{
int width=2;
int height=3;
public void swapdata();
}
/*-------------------------------创建U盘类,继承与USB---------------------------------------*/
public class UseDisk implements USB
{
public void swapdata()
{
System.out.println("U盘连接电脑!");
}
}
{
public void swapdata()
{
System.out.println("U盘连接电脑!");
}
}
/*---------------------------创建鼠标类,继承与USB------------------------------------------*/
class UseMouse implements USB
{
public void swapdata()
{
System.out.println("鼠标连接电脑!");
}
}
{
public void swapdata()
{
System.out.println("鼠标连接电脑!");
}
}
/*--------------------------------创建PC对象-----------------------------------------*/
public class PC
{
public void UseDevice(USB u)
{
u.swapdata();
}
}
{
public void UseDevice(USB u)
{
u.swapdata();
}
}
/*-------------------------------Main方法-----------------------------------------*/
public class TestUsb
{
public static void main(String[] args)
{
USB um=new UseMouse();
USB ud=new UseDisk();
PC pc =new PC();
pc.UseDevice(ud);
pc.UseDevice(um);
}
}
{
public static void main(String[] args)
{
USB um=new UseMouse();
USB ud=new UseDisk();
PC pc =new PC();
pc.UseDevice(ud);
pc.UseDevice(um);
}
}
输出结果:
U盘连接电脑!
鼠标连接电脑!
鼠标连接电脑!
示例二:
设计一个打印机,可以分别包含彩色墨盒和黑白墨盒;可以打印A4和B5。
分析:设计两个接口,分别为InkBox(墨盒)和Parper(纸张)。设计两个类实现接口InkBox,分别为ColorInkBox和BlackInkBox。设计两个类实现Parper,分别为A4Parper和B5Parper。然后创建Printer对象实现打印任务。最后创建main方法。
/*-----------------------设计InkBox(墨盒)和Parper(纸张)接口--------------------------------*/
public interface InkBox
{
public void ink();
}
{
public void ink();
}
public interface Parper
{
public void page();
}
{
public void page();
}
/*------------------------设计InkBox的两个类---------------------------------------*/
class ColorInkBox implements InkBox
{
public void ink()
{
System.out.print("彩色打印机进行打印,");
}
}
{
public void ink()
{
System.out.print("彩色打印机进行打印,");
}
}
class BlackInkBox implements InkBox
{
public void ink()
{
System.out.print("黑白打印机进行打印,");
}
}
{
public void ink()
{
System.out.print("黑白打印机进行打印,");
}
}
/*---------------------------设计Parper的两个类--------------------------------------*/
class A4Parper implements Parper
{
public void page()
{
System.out.println("打印A4纸张");
}
}
{
public void page()
{
System.out.println("打印A4纸张");
}
}
class B5Parper implements Parper
{
public void page()
{
System.out.println("打印B5纸张");
}
}
{
public void page()
{
System.out.println("打印B5纸张");
}
}
/*-------------------------创建Printer对象-------------------------------------------*/
public class Printer
{
public void Operational(InkBox ib, Parper p)
{
ib.ink();
p. page();
}
}
{
public void Operational(InkBox ib, Parper p)
{
ib.ink();
p. page();
}
}
/*---------------------------创建Main方法-----------------------------------*/
public class TestPrinter
{
public static void main(String[] args)
{
InkBox ibc=new ColorInkBox();
InkBox ibb=new BlackInkBox();
Parper pb= new B5Parper();
Parper pa= new A4Parper();
Printer p=new Printer();
p.Operational(ibb,pa);
p.Operational(ibc,pb);
}
}
{
public static void main(String[] args)
{
InkBox ibc=new ColorInkBox();
InkBox ibb=new BlackInkBox();
Parper pb= new B5Parper();
Parper pa= new A4Parper();
Printer p=new Printer();
p.Operational(ibb,pa);
p.Operational(ibc,pb);
}
}
输出结果:
黑白打印机进行打印,打印A4纸张
彩色打印机进行打印,打印B5纸张