黑马程序员技术交流社区

标题: 对象类型的转换(向上转型) [打印本页]

作者: 黑白小調°    时间: 2014-2-16 22:29
标题: 对象类型的转换(向上转型)
这个转型是怎样实现的?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);  
       }
}   

作者: 一年_Hei    时间: 2014-2-16 22:48
调用draw(p)时,//Quadrangle  q=new Parallelogram()   父类引用指向子类对象
作者: 疲劳的小马    时间: 2014-2-16 22:58
楼主这句少些了一个关键字extends,应该是public class Parallelogram extends Quadrangle,执行到语句draw(p)时,就相当于Quadrangle  q=new Parallelogram()  ,这个就是父类引用指向子类对象,是多态。其实本例中父类Quadrangle中的draw方法是静态的,可以直接用类名进行调用,不需要创建对象。
作者: lgqioi    时间: 2014-2-17 00:28
多态:父类的引用指向了自己的子类对象,也可以接收自己的子类对象。
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();
        }
}
作者: 徐青松    时间: 2014-2-17 00:46
调用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这里就必须强制转换。





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