A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 皮卫凯 中级黑马   /  2012-9-13 14:09  /  1467 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 皮卫凯 于 2012-9-13 20:04 编辑

/*需求:电脑运行实例,电脑运行基于主板。*/

interface PCI                //这是定义的接口
{
public void open();
public void close();
}



class MainBoard
{
      public void run()
             {
                   System.out.println("mainboard run ");
              }
      public void usePCI(PCI p)      //PCI p = new NetCard()    //   接口型引用指向自己的子类对象。
         {
              if(p!=null)                       //上面这句话,怎么理解,不是定义了接口么,为什么还要定义usePCI的方法?   
                 {                                //传递一个PCI  p ,这不是定义一个接口对象的意思么?
                    p.open();
                    p.close();
   
                  }
          }
}

class SoundCard implements PCI {...}
class NetCard implements PCI  {...}


class DuoTaiDemo               //主函数
{
public static void main(String[] args)
{
  MainBoard mb = new MainBoard();   //创建了主板mb
  mb.run();
  mb.usePCI(null);
  mb.usePCI(new NetCard());               //这里怎么理解?怎么理解传递?
  mb.usePCI(new SoundCard());
  
}
}

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 鼓励一下!

查看全部评分

3 个回复

倒序浏览
这个就是多态 接口的方法都是抽象函数 那么接口中的函数就必须在子类中实现, 然后就是接口对象指向继承该接口的子类  就好比 我给你看的是一个USB接口 这个接口你看上去很简单 但是接口里面连接着很多数据线 这个数据线就好吧 接口对象指向继承该接口的子类 这样解释懂吗

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这个程序讲的是接口,但是却应用了典型的封装特性,因为接口在很大程度上是为了高度封装,提高复用性。

interface PCI                //这是定义的接口          //接口定义的功能是运行和结束,因为这是声卡和显卡所共有的特性。
{
public void open();
public void close();
}



class MainBoard
{
      public void run()
             {
                   System.out.println("mainboard run ");
              }
      public void usePCI(PCI p)      //PCI p = new NetCard()    //   接口型引用指向自己的子类对象。
         {
              if(p!=null)                       //上面这句话,怎么理解,不是定义了接口么,为什么还要定义usePCI的方法?   
                 {                                //传递一个PCI  p ,这不是定义一个接口对象的意思么?
                    p.open();
                    p.close();                                 //不是定义一个接口对象,而是往主板对象中传递一个接口对象,也就是声卡或者显卡对象。                  
                                                                  //声卡和显卡实现接口是用下面单独的类实现的,尽可能功能单一,提高复用性。              
    }                                                          //定义了这个方法,可以灵活选择是否应用显卡或声卡的接口实现,因为主板上不一定有声卡或显卡。          }
}

class SoundCard implements PCI {...}                   //声卡和显卡需要实现接口,完成运行和结束的功能代码。
class NetCard implements PCI  {...}


class DuoTaiDemo               //主函数
{
public static void main(String[] args)
{
  MainBoard mb = new MainBoard();   //创建了主板mb
  mb.run();
  mb.usePCI(null);
  mb.usePCI(new NetCard());               //这里怎么理解?
  mb.usePCI(new SoundCard());                //这里就是主板对象调用声卡和显卡对象,也就是插上声卡和显卡
  
}
}

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

回复 使用道具 举报
interface PCI                //这是定义的接口
{
public void open();
public void close();
}



class MainBoard
{
      public void run()
             {
                   System.out.println("mainboard run ");
              }
      public void usePCI(PCI p)      //PCI p = new NetCard()    //   接口型引用指向自己的子类对象。
         {
              if(p!=null)                       //上面这句话,怎么理解,不是定义了接口么,为什么还要定义usePCI的方法?   |||因为接口中的方法都是抽象方法不能创建对象。需要子类复写了父类中的抽象方法然后创建对象。这不PCI  p = new NetCard() 这里是多态的表现,向上转型了。PCI代表的是接口类型,就相当于int a = 1 中int是整数类型一样,那么P就是就是接口类型的一个引用型变量,然后new NetCard()是创建子类对象。那么子类对象的地址值就赋值给了p,既然p指向了一个对象,那么就能调用复写后的方法了。为什么要定义usePci方法,那是因为这里方便调用而已,其实,你子类复写完父类的方法后,也可以在主函数中创建子类对象,然后调用的啊!
                 {                                //传递一个PCI  p ,这不是定义一个接口对象的意思么?||||是接收到子类对象。
                    p.open();
                    p.close();
   
                  }
          }
}

class SoundCard implements PCI {...}
class NetCard implements PCI  {...}


class DuoTaiDemo               //主函数
{
public static void main(String[] args)
{
  MainBoard mb = new MainBoard();   //创建了主板mb
  mb.run();
  mb.usePCI(null);
  mb.usePCI(new NetCard());               //这里怎么理解?|||里面的那个new NetCard()是在创建一个子类对象,然后作为一个参数传递给usePCI方法。
  mb.usePCI(new SoundCard());
  
}
}

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
田建 + 1 赞一个!
皮卫凯 + 2 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马