黑马程序员技术交流社区

标题: 这么写怎么也会报错呢、、、 [打印本页]

作者: 曾翰翰    时间: 2012-11-3 20:01
标题: 这么写怎么也会报错呢、、、
package day10;
//水果类
public class Fruit {
}
class fruit{

}//苹果类继承水果类
package day10;
public class Apple extends Fruit{
}

package day10;
public class Pear extends Fruit{
}//梨类继承水果类

package day10;
public class Sample09 {
public static void main(String args[]){
  Fruit f = new Apple();
  Pear p = f;
}
}

这个问题出哪了、、、倒数第三行  Pear p = f;
在f位置报错。。碉堡了


作者: 朱宏青    时间: 2012-11-3 20:43
??不同的对象能互相赋值?是我孤陋寡闻了还是怎么滴....好吧 我说这真不行.

虽然他们是一个"爸爸",但是双胞胎也是有区别的...
作者: 曾翰翰    时间: 2012-11-3 20:48
看书了。。。好像是的。。将Fruit对象转成pear  基本上就可以、、只是从字面理解有点困难。。梨派生。。苹果。。。

作者: 黑马贾林栋    时间: 2012-11-3 21:15
Fruit f = new Apple();  这句是new了一个Apple对象,叫f。p是Pear对象,和Apple没继承关系,所以报错
作者: 梁胜海    时间: 2012-11-4 13:34
没强制转换啊,孩子。
Fruit f = new Apple();
   Pear p =(Pear) f;
作者: 刘丽娜    时间: 2012-11-4 15:29
强制转换一下就好了
作者: 林晓泉    时间: 2012-11-4 23:51

  1. class Fruit{
  2.         String name;
  3. }//苹果类继承水果类

  4.   class Apple extends Fruit{
  5.           Apple()
  6.           {
  7.           super.name="苹果";

  8.           }
  9. }


  10.   class Pear extends Fruit{
  11.           Pear()
  12.           {          
  13.                   super.name="梨";
  14.           }
  15. }//梨类继承水果类


  16.   class Sample09 {
  17. public static void main(String args[]){
  18.    Fruit f = new Apple();
  19.    System.out.println(f.name);
  20.    Pear p = (Pear)f;
  21.    System.out.println(p.name);
  22. }
  23. }
复制代码
Fruit f = new Apple(); //这句是父类类型引用指向子类对象
Pear p = f;//想要将父类类型引用赋给子类对象要强制转换
Pear p = (Pear)f;//可以通过编译 但是感觉怪怪的  f指向Apple()对象,结果被强转成了Pear()
改了下代码 运行提示是输出苹果,以及提示异常java.lang.ClassCastException: Apple cannot be cast to Pear
这个是运行时异常,编译没问题,运行报错,不能把Apple 对象强转成Pear对象
作者: 梁枝武    时间: 2012-11-5 00:15
1,你要是想将父类引用f转为子类对象引用,需要强制转换,你没有加强转操作所以报错
2,强转的话不能转换成同一父类的其他没有直接关系的子类,比如男人不能强转为女人,猫不能强转为狗,否则出现类型转换异常
作者: 陈军    时间: 2012-11-5 10:19
Fruit f = new Apple();
  Pear p = f; 就这2句话

你先用多态把 苹果对象的地址赋值给了 水果的引用变量f。
然后又把 第二句话是引用传递,
相当于把 f指向的地址值又赋值给 Pear引用变量p.
所以p变量也指向了 苹果对象。。
你思考下这正常么? 如果这样也对。那多态岂不乱套了?而且也不符合现实。
作者: 曾翰翰    时间: 2012-11-5 11:51
这个问题我用苹果类继承了梨类、、算是一种解决方法吧。。对于各位的方法我会尝试下。。谢谢




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