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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾翰翰 中级黑马   /  2012-11-3 20:01  /  1796 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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位置报错。。碉堡了

评分

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

查看全部评分

9 个回复

倒序浏览
??不同的对象能互相赋值?是我孤陋寡闻了还是怎么滴....好吧 我说这真不行.

虽然他们是一个"爸爸",但是双胞胎也是有区别的...

评分

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

查看全部评分

回复 使用道具 举报
看书了。。。好像是的。。将Fruit对象转成pear  基本上就可以、、只是从字面理解有点困难。。梨派生。。苹果。。。

评分

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

查看全部评分

回复 使用道具 举报
Fruit f = new Apple();  这句是new了一个Apple对象,叫f。p是Pear对象,和Apple没继承关系,所以报错

评分

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

查看全部评分

回复 使用道具 举报
没强制转换啊,孩子。
Fruit f = new Apple();
   Pear p =(Pear) f;

评分

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

查看全部评分

回复 使用道具 举报
强制转换一下就好了

评分

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

查看全部评分

回复 使用道具 举报

  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:15
8#
1,你要是想将父类引用f转为子类对象引用,需要强制转换,你没有加强转操作所以报错
2,强转的话不能转换成同一父类的其他没有直接关系的子类,比如男人不能强转为女人,猫不能强转为狗,否则出现类型转换异常

评分

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

查看全部评分

回复 使用道具 举报
陈军 中级黑马 2012-11-5 10:19:32
9#
Fruit f = new Apple();
  Pear p = f; 就这2句话

你先用多态把 苹果对象的地址赋值给了 水果的引用变量f。
然后又把 第二句话是引用传递,
相当于把 f指向的地址值又赋值给 Pear引用变量p.
所以p变量也指向了 苹果对象。。
你思考下这正常么? 如果这样也对。那多态岂不乱套了?而且也不符合现实。

评分

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

查看全部评分

回复 使用道具 举报
这个问题我用苹果类继承了梨类、、算是一种解决方法吧。。对于各位的方法我会尝试下。。谢谢

评分

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

查看全部评分

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