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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑白小調° 中级黑马   /  2014-2-16 22:29  /  1507 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个转型是怎样实现的?class Quadrangle
  {
      public static void draw (Quadrangle q)
          {
                 //SomeSentence
          }
}
public class Parallelogram Quadrangle
  {
      public static void main(String args[])
      {
          Parallelogram p =new Parallelogram( );
           draw(p);  
       }
}   

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

倒序浏览
一年_Hei 来自手机 中级黑马 2014-2-16 22:48:53
沙发
调用draw(p)时,//Quadrangle  q=new Parallelogram()   父类引用指向子类对象

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
楼主这句少些了一个关键字extends,应该是public class Parallelogram extends Quadrangle,执行到语句draw(p)时,就相当于Quadrangle  q=new Parallelogram()  ,这个就是父类引用指向子类对象,是多态。其实本例中父类Quadrangle中的draw方法是静态的,可以直接用类名进行调用,不需要创建对象。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
多态:父类的引用指向了自己的子类对象,也可以接收自己的子类对象。
abstract class Animal{
        abstract void eat();
}
class Cat extends Animal{
        public void eat(){
                System.out.println("吃鱼");
        }
        public void catchMouse(){
                System.out.println("抓老鼠");
        }
}

class pq{
        public static void main(String[] args) {
                function(new Cat());
        }
        public static void function(Animal a){ //Animal a = new Cat();
                a.eat();
        }
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
调用draw(p)时,这里的p是子类对象,原本draw()方法参数是p的父类,这里可以自动向上转型是因为多态的应用:父类的引用指向了自己的子类对象,也可以接收自己的子类对象。相当于执行了Quadrangle  q=new Parallelogram(),父类引用指向子类对象。可以把父类参数想象成是Object类型,子类p想象成Object的子类String,Object object=new String("abc")没问题,object可以接受String类型,object=p可以赋值,但是p=(String)object这里就必须强制转换。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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