Java面向接口编程—习题
需求
- 说明采用面向接口编程思想
- 组装一台计算机
- 计算机的主要组成部分:CPU 硬盘 内存
实现思路
- 定义CPU的接口CPU,返回CPU品牌和主频
- 定义内存的接口EMS,返回类型和容量
- 定义硬盘的接口HardDisk,返回容量
- 编写各组件厂商分别实现CPU、EMS、和HardDisk接口
- 编写计算机类,组装计算机并显示相关信息编写测试类运行
注意点:
- 当调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
- 接口里面方法定义为抽象方法,为了让实现接口的实现类按照这种方法约束进行重写。
具体步骤
1.步骤一:创建接口
接口里面方法定义为抽象方法,为了让实现接口的实现类按照这种方法约束进行重写。
定义CPU的接口CPU,返回CPU品牌和主频
public interface Cpu {
public abstract String cpuInfo();
}
定义内存的接口EMS,返回类型和容量
public interface EMS {
public String emsInfo();
}
定义硬盘的接口HardDisk,返回容量
public interface HardDisk {
public String hardDiskInfo();
}
2.步骤2:创建接口的实现类
这里 默认采取标准的javab类来创建
CPU的接口的实现类
public class CpuImplement implements Cpu{
private String brand;
public String zhuPin;
public CpuImplement() {
}
public CpuImplement(String brand, String zhuPin) {
this.brand = brand;
this.zhuPin = zhuPin;
}
public String getBrand() { return brand;}
public void setBrand(String brand) {this.brand = brand;}
public String getZhuPin() { return zhuPin;}
public void setZhuPin(String zhuPin) {
this.zhuPin = zhuPin;}
@Override
public String cpuInfo() {
return "CPU的品牌:"+this.getBrand()+",主频是:"+this.getZhuPin();
}
public void print(){
System.out.println("这是cpu。。。");
}
}
内存的接口EMS实现类
public class EmsImplement implements EMS{
private String emsType;
public EmsImplement() {
}
public EmsImplement(String emsType) {
this.emsType = emsType;
}
public String getEmsType() {
return emsType;
}
public void setEmsType(String emsType) {
this.emsType = emsType;
}
@Override
public String emsInfo() {
return "内存容量为:"+this.emsType;
}
}
硬盘的接口HardDisk的实现类
public class HardDiskImp implements HardDisk{
private String zoom;
public HardDiskImp() {
}
public HardDiskImp(String zoom) {
this.zoom = zoom;
}
public String getZoom() {
return zoom;
}
public void setZoom(String zoom) {
this.zoom = zoom;
}
@Override
public String hardDiskInfo() {
return "硬盘容量为:"+this.zoom;
}
}
3.步骤3:创建一个厂商
这里的厂商可以为操作实现类业务的类
注意:厂商类有个打印信息的方法,方法形参是接口类型,当调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
public class Makers {
private Cpu cpu;
private EMS ems;
private HardDisk hardDisk;
public Makers() {
}
public Makers(Cpu cpu, EMS ems, HardDisk hardDisk) {
this.cpu = cpu;
this.ems = ems;
this.hardDisk = hardDisk;
}
public Cpu getCpu() {
return cpu;
}
public void setCpu(Cpu cpu) {
this.cpu = cpu;
}
public EMS getEms() {
return ems;
}
public void setEms(EMS ems) {
this.ems = ems;
}
public HardDisk getHardDisk() {
return hardDisk;
}
public void setHardDisk(HardDisk hardDisk) {
this.hardDisk = hardDisk;
}
//调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
public void printInfo(Cpu cpu, EMS ems, HardDisk hardDisk){
System.out.println("计算机的信息如下:");
System.out.println(cpu.cpuInfo());
System.out.println(ems.emsInfo());
System.out.println(hardDisk.hardDiskInfo());
}
}
4.步骤四:创建测试类
注意点:
在创建实现类对象的时候用接口来接收实现类的对象 (即 多态形式),此时会有局限性,调用不到实现类里独有的方法,如下面注释里的代码,用接口Cpu来接收CpuImplement实现类的对象,此时接口Cpu会调用不到CpuImplement实现类里独有的print方法。
Cpu c = new CpuImplement("Inter","3.8HGZ");
//c.print();此处报错
public class Test {
public static void main(String[] args) {
/**
* 实现思路
* 定义CPU的接口CPU,返回CPU品牌和主频
* 定义内存的接口EMS,返回类型和容量
* 定义硬盘的接口HardDisk,返回容量
* 编写各组件厂商分别实现CPU、EMS、和HardDisk接口
* 编写计算机类,组装计算机并显示相关信息
* 编写测试类运行
*/
// 接口来接收实现类的对象 ——>多态
// 会有局限性,调用不到实现类里独有的方法
// Cpu c = new CpuImplement("Inter","3.8HGZ");
// c.print();此行报错
// 实现类 来接受实现类的对象
CpuImplement cpu = new CpuImplement("Inter","3.8HGZ");
EmsImplement ems = new EmsImplement("4GB");
HardDiskImp hardDisk = new HardDiskImp("3000GB");
// 厂商类
Makers m = new Makers();
m.printInfo(cpu,ems,hardDisk);
}
}