黑马程序员技术交流社区

标题: 多态,接口的练习延展 [打印本页]

作者: lucy198921    时间: 2013-3-28 21:24
标题: 多态,接口的练习延展
本帖最后由 lucy198921 于 2013-3-29 20:26 编辑

以下是自己练习的题目,代码都正常.

但是我想做个延伸,就是有以下改变,

苹果手机唯独只有写入数据的功能

,其他打印机和网卡都具有读取数据和写入数据的功能.



________________________________________________

/*
  主板的实例
    1. 描述主板
          开机,使用USB设备
        2. 描述USB接口
          定义2个功能,规则
          读取数据,写入数据

        3. 打印机,打印机接入USB接口上
           打印机实现USB接口
*/

interface  USB
{
        public abstract void read();
        public abstract void write();
}

class Printer implements USB
       {
public   void read()
        {
System.out.println("读取打印机数据");
        }
public   void write()
        {
System.out.println("写入打印机数据");
        }
       }


class NetCard implements USB
       {
public   void read()
        {
System.out.println("读取打网卡数据");
        }
public   void write()
        {
System.out.println("写入网卡数据");
      }
      }

class Iphone implements USB
     {
public   void read()
        {
System.out.println("读取苹果5数据");
        }
public   void write()
        {
System.out.println("写入苹果5数据");
}
}


class MainBoard
{
        public void openPower()
        {
        System.out.println("系统正常启动中");
        }
        public void useUSB(USB u)
                {
        if (null==u)
        {
                System.out.println("无外接设备接入");
        return;
        }
                u.read();
                u.write();
        }
}



class Computer
{

        public static void main(String[] args)
        {
        MainBoard mb= new MainBoard();
        mb.openPower();
        mb.useUSB(null);
        mb.useUSB(new Printer());
                mb.useUSB(new NetCard());
                        mb.useUSB(new Iphone());

        }
}

作者: 黑马李杰    时间: 2013-3-28 22:58
新手有错误请不要笑我。我觉得这个好像类似于那个Adapter,代码如下:
package com.j2se.text;

interface USB {
        public abstract void read();

        public abstract void write();
}

class USB2 implements USB {
        public void read() {}
       
        public void write(){}
}

class Printer implements USB {
        public void read() {
                System.out.println("读取打印机数据");
        }

        public void write() {
                System.out.println("写入打印机数据");
        }
}

class NetCard implements USB {
        public void read() {
                System.out.println("读取打网卡数据");
        }

        public void write() {
                System.out.println("写入网卡数据");
        }
}

class Iphone extends USB2 {
        public void write() {
                System.out.println("写入苹果5数据");
        }
}

class MainBoard {
        public void openPower() {
                System.out.println("系统正常启动中");
        }

        public void useUSB(USB u) {
                if (null == u) {
                        System.out.println("无外接设备接入");
                        return;
                }
                u.read();
                u.write();
        }
}

class Computer {

        public static void main(String[] args) {
                MainBoard mb = new MainBoard();
                mb.openPower();
                mb.useUSB(null);
                mb.useUSB(new Printer());
                mb.useUSB(new NetCard());
                mb.useUSB(new Iphone());

        }
}

作者: HM马明宇    时间: 2013-3-29 01:17
自己的理解,可能不对,还望版主给点意见:
程序中的接口和现实生活中的接口不是完全一样的,现实中的usb口可读、写数据、充电,具有三个功能,但是是通过插入其中的设备的驱动程序来完成对设备的读取数据或者充电的,也就是说usb接口是“知道”是什么设备能具有什么功能的(准确来说是操作系统知道),我的u盘有u盘的驱动,摄像头有摄像头的驱动,操作系统使用不同的设备的不同驱动才用一个usb完成了多个功能。苹果设备的只写功能,可以通过其驱动程序“告知”操作系统来完成。
但是我们的程序中并没有什么驱动程序,也就是说我们的实现类没有办法去让接口知道它是一个什么样的类,所以我们程序中的接口不应该像显示中的usb那样多功能聚合,而应该一个接口只定义一个功能。
而且我们知道java程序中的接口是有规定的,其实现类必须实现其规定的所有功能,除非其实现类是抽象类。但是java中的接口我们可以多实现而不是像继承那样只能单继承,这样我们就能通过实现多接口而实现一个类的多功能了。
所以,我认为的解决方法就是写两个接口,一个读一个写,让除了苹果之外的设备实现两个接口,而苹果只实现写就行了。
希望能让你明白,也希望版主能用心看下,给个评价,到底对不对。
作者: 陈丽莉    时间: 2013-3-29 13:33
记得及时处理帖子咯~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2