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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王璐 中级黑马   /  2012-6-12 20:14  /  1222 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王璐 于 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到底代表什么?

3 个回复

倒序浏览
本帖最后由 黑马张扬 于 2012-6-12 20:22 编辑

p只是一个父类的引用   它指向哪个子类就代表的哪个子类的对象
PCI p=new NetCard() 比如这一句p代表的就是一个NetCard对象
接口是不能建立对象 但实现它的子类是可以建立对象的
这就典型的父类引用指向子类对象 是多态的一种表现形式!
回复 使用道具 举报
这里用到了多态,父类引用指向子类对象。
  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. }
复制代码
回复 使用道具 举报
PCI p,表示声明了一个引用,p就被声明为PCI接口的引用,意思就是p可以指向实现了接口的子类对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马