转自:http://blog.csdn.net/ld422586546/article/details/9707997

Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用。

例:

public class Test {

public static void main(String[] args) {
  Person person = new Boy();
  Boy boy = (Boy) person;
  boy.eat();
 }

}

class Person {
    public void eat() {
     System.out.println("The people were eating");
    }
}

class Boy extends Person {
 public void eat() {
  System.out.println("The boy were eating");
 }
}

打印结果:The boy were eating

原因:当Boy实例化后将引用地址返回传给person,这时person引用实际指向的是Boy,所以将person转换成Boy能成功。

再定义一个类:

class Girl extends Person {
 public void eat() {
  System.out.println("The girl were eating");
 }
}

main方法中添加:

Person p = new Girl();
  Boy b = (Boy)p;
  b.eat();

运行时提示:Girl cannot be cast to Boy(不能将女孩转换成男孩)

原因:当Girl实例化后将引用地址返回传给p,这时p引用实际指向的是Girl,将p转换成Boy也就是说将Girl转换成Boy,肯定不能成功。

上面的例子换句话来说,男孩和女孩都是人这肯定是对的,但你要说女孩是男孩肯定是不对的。

最新文章

  1. java 学习笔记——网络(Socket)
  2. mysql批量写入
  3. PowerDesigner技巧
  4. Hybrid App 和 React Native 开发那点事
  5. The '_imaging' module for the PIL could not be imported: DLL load failed: The specified module could not be found
  6. php中文匹配
  7. Android 5.0自定义动画
  8. 一个"Median Maintenance"问题
  9. 用js来实现那些数据结构08(链表02-双向链表)
  10. python 读取大文件,按照字节读取
  11. mysql 增加只读用户查询指定表
  12. 软工实践——团队作业需求规格说明书——原型UI设计
  13. C++ 多用户模式下同一个exe只能运行一次
  14. 手机常用meta标签-有注释
  15. iscroll源码学习(1)
  16. 设置eclipse编码格式
  17. 在unity中使用protobuf
  18. [ Error 分析] Comparison method violates its general contract!
  19. .net mvc 用jquery ajax成功后页面跳转。
  20. cnpm 下载

热门文章

  1. 传说中的纯CSS圆角代码
  2. Linux 精确获取指定目录对应的块的剩余空间
  3. thinkphp Ajax表单提交
  4. 【转】【C#】ZIP、RAR 压缩与解压缩
  5. linux -- at命令
  6. php jquery pjax示例源码 (ajax请求,并改变url)
  7. 反编译工具 jad
  8. linux 访问远程务器代码
  9. Case用法
  10. 一篇文看懂Hadoop