多态接口思维导图
接口的定义
使用interface来定义一个接口。接口定义与类的定义类似,也是分为接口的声明和接口体,其中接口体由变量定义和方法定义两部分组成。定义接口的基本语法格式如下:
[修饰符]interface接口名[extend 父接口名列表]{
[public][static][final]变量;
[public][abstract] 方法;
}
定义接口的语法格式的参数说明如表:
注意:Java的类文件一样,接口文件的文件名必须与接口名相同。
接口的实现
在类中实现接口可以使用implements关键字,基本语法格式如下:
[修饰符]class<类名>[extends 父类名][implements 接口列表]{
}
实现接口的语法格式的参数说明如下表:
在类中实现接口时,方法名、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。
在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔,这时就可能出现变量或方法名冲突的情况。解决该问题时,如果变量冲突,则需要明确指定变量的接口,可以通过“接口名.变量”实现。如果出现方法冲突,则只要实现一个方法即可。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; //属性 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(); //第二种方式 匿名类new AMD() c1.setCpu(a1); c1.setDisplaycard(new Ati()); c1.run(); Computer c2=new Computer("华硕"); c2.setCpu(new Intel()); c2.setDisplaycard(new Nivdia()); c2.run(); // 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(); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; //cpu的接口 public interface ICPU { //控制 public void command(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; public interface IDisplayCard { //显示 public void display(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; public class Intel implements ICPU { @Override public void command() { System.out.println("我是Intel的CPU"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; public class AMD implements ICPU { @Override public void command() { System.out.println("我是AMD的CPU"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; 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)
package org.hanqi.pn0120; public class AMD3 extends AMD implements IDisplayCard { @Override public void display() { System.out.println("继承了AMD的一代CPU,增加了显卡功能"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; public class Ati implements IDisplayCard { @Override public void display() { System.out.println("我是A卡"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; public interface ICPU2 extends ICPU,IDisplayCard { public void display(); }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; public class Intel2 implements ICPU2 { @Override public void command() { } @Override public void display() { } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; public class Nivdia implements IDisplayCard { @Override public void display() { System.out.println("我是N卡"); } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package org.hanqi.pn0120; public interface IJieKou { // public void fangfa1(); public int fangfa2(); public String fangfa3(int i); public void fangfa4(int w); }