黑马程序员技术交流社区

标题: 毕老师多态主板示例疑问——已解决 [打印本页]

作者: 王璐    时间: 2012-6-12 20:14
标题: 毕老师多态主板示例疑问——已解决
本帖最后由 王璐 于 2012-6-15 08:24 编辑
  1. class MainBoard
  2. {
  3.         public void run()
  4.         {
  5.                 System.out.println("mainboard run");
  6.         }
  7.         public void usePCI(PCI p)  //PCI p=new NetCard() //接口类型引用指向自己子类的对象
  8.         {
  9.                 if(p!=null)
  10.                 {
  11.                 p.open();
  12.                 p.close();
  13.                 }
  14.         }
  15. }
复制代码
其中PCI p 怎么理解?接口类不可以建立对象,那个p到底代表什么?
作者: 黑马张扬    时间: 2012-6-12 20:21
本帖最后由 黑马张扬 于 2012-6-12 20:22 编辑

p只是一个父类的引用   它指向哪个子类就代表的哪个子类的对象
PCI p=new NetCard() 比如这一句p代表的就是一个NetCard对象
接口是不能建立对象 但实现它的子类是可以建立对象的
这就典型的父类引用指向子类对象 是多态的一种表现形式!
作者: 赵兵锋    时间: 2012-6-12 20:23
这里用到了多态,父类引用指向子类对象。
  1. interface PCI{
  2.         void open();//留给实现此接口的非抽象类类实现这两个方法
  3.         void close();
  4. }
  5. class NetCard implements PCI{//实现接口,实现接口里的方法
  6.         @Override
  7.         public void open() {
  8.                 System.out.println("NetCard is open!");
  9.         }
  10.         @Override
  11.         public void close() {
  12.                 System.out.println("NetCard is close!");
  13.         }
  14. }
  15. public class Main{
  16.          public static void main(String[] args){
  17.                  PCI p=new NetCard();//创建一个NetCard类的对象,但是用其实现的接口PCI类型的引用指向它。
  18.          usePCI(p);
  19.          }
  20.          public static void usePCI(PCI p)  //尽管这里标明接受参数的类型为PCI,但实际可以接受PCI的子类对象。
  21.      {
  22.              if(p!=null)
  23.              {
  24.                      p.open();
  25.                      p.close();
  26.              }
  27.      }
  28. }
复制代码

作者: 潘东升    时间: 2012-6-12 20:28
PCI p,表示声明了一个引用,p就被声明为PCI接口的引用,意思就是p可以指向实现了接口的子类对象。





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