大纲:
一.定义:
使用interface来定义一个接口。接口定义与类的定义相似,也是分为接口的声明和接口体,其中接口体由变量定义和方法定义两部分组成。
定义接口基本语法:
[修饰符]interface接口名[extends 父接口名列表]
{
[public][static][final]变量;
[public][abstract]方法;
}
定义接口的语法格式的参数说明:
二.接口的实现
在类中实现接口可以使用implements关键字,
基本语法格式:
[修饰符]class<类名>[extends 父类名][implements 接口列表]
{
}
实现借口语法格式的参数说明:
在类中实现接口时,方法名、返回值类型、参数的个数及类型必须接口中完全一致,并且必须实现接口中的所有方法。
在类的接口中,只能做但重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔,只是就可能出现变量或方法名冲突的情况。解决该问题时,如果变量冲突,则需要明确指定变量的接口,可以通过“接口名.变量”实现。如果出现方法冲突,则只要实现一个方法即可。
上课例题讲解:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Computer { //品牌 private String pinpai; //CPU private ICPU cpu; //显卡 private IDisplayCard displaycard; public String getPinpai() { return pinpai; } public void setPinpai(String pinpai) { this.pinpai = pinpai; } public ICPU getCpu() { return cpu; } public void setCpu(ICPU cpu) { this.cpu = cpu; } public IDisplayCard getDisplaycard() { return displaycard; } public void setDisplaycard(IDisplayCard displaycard) { this.displaycard = displaycard; } //运行 public void run() { //cpu this.cpu.command(); //显卡 this.displaycard.display(); System.out.println("我组装的电脑"+pinpai+"开始运行"); } public Computer(String pinpai) { super(); this.pinpai = pinpai; } public static void main(String[]args) { Computer c1=new Computer("hp"); //第一种方法 AMD a1=new AMD(); c1.setCpu(a1); //匿名类 newAMD() c1.setCpu(new AMD()); c1.setDisplaycard(new Nivdia()); c1.run(); System.out.println(); Computer c2=new Computer("华硕"); c2.setCpu(new Intel2()); c2.setDisplaycard(new Ati()); c2.run(); System.out.println(); AMD2 a2=new AMD2(); Computer c3=new Computer("acer"); c3.setCpu(a2); c3.setDisplaycard(a2); c3.run(); System.out.println(); AMD3 a3=new AMD3(); Computer c4=new Computer("acer"); c4.setCpu(a3); c4.setDisplaycard(a3); c4.run(); } } 输出:我是AMD的CPU 我是N显卡 我组装的电脑hp开始运行 我是A显卡 我组装的电脑华硕开始运行 AMD的带显卡的CPU AMD的CPU集成显卡 我组装的电脑acer开始运行 我是AMD的CPU 继承了AMD的一代CPU,增加了显卡功能 我组装的电脑acer开始运行
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//实现 public class AMD implements ICPU { @Override public void command() { // TODO 自动生成的方法存根 System.out.println("我是AMD的CPU"); } @Override public void display() { // TODO 自动生成的方法存根 } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class AMD2 implements ICPU, IDisplayCard { @Override public void display() { System.out.println("AMD的CPU集成显卡"); } @Override public void command() { System.out.println("AMD的带显卡的CPU"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class AMD3 extends AMD implements IDisplayCard { @Override public void display() { System.out.println("继承了AMD的一代CPU,增加了显卡功能"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Ati implements IDisplayCard { @Override public void display() { // TODO 自动生成的方法存根 System.out.println("我是A显卡"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//显卡接口 public interface IDisplayCard { //显示 public void display(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//CPU接口 public interface ICPU { //控制 public void command(); void display(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public interface ICPU2 extends ICPU { public void display(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Intel implements ICPU { @Override public void command() { // TODO 自动生成的方法存根 System.out.println("我是Intel的CPU"); } @Override public void display() { // TODO 自动生成的方法存根 } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Intel2 implements IDisplayCard, ICPU2 { @Override public void command() { // TODO 自动生成的方法存根 } @Override public void display() { // TODO 自动生成的方法存根 } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public interface IJieKou { //内部只写属性方法成员名 public void fangfa1();//接口不需要写{} public int fangfa2(); public String fangfa3(int i); public void fangfa4(int w); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Nivdia implements IDisplayCard { @Override public void display() { // TODO 自动生成的方法存根 System.out.println("我是N显卡"); } }