Java面向接口编程—习题

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);
    }
}

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蔚一

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

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

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

打赏作者

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

抵扣说明:

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

余额充值