父类可以包含私有成员变量,私有方法,子类继承不到,可以说父类范围大。。但是子类也可以有特有方法,也可以说子类范围大。那到底谁的范围大呢?为什么子类引用转换成父类引用是向下强制转换?
解决方案 »
- Tomcat启动一段时间后程序不能运行了
- jquery easyui 使用后台的json
- struts2在tomcat中启动报错
- JAVA之路
- ejb问题(jboss下)
- jdbc连接oracle出现的错误和异常,希望大家帮帮忙!
- RMI的问题请大家帮忙呀!
- 安装Websphere4.0后,在系统的 服务当中没有找到IBM WS AdminServer 4.0服务!命令行下运行adminservice提示错误,代码为1063 重装N遍了
- jb7输入中文就异常退出的问题如何解决,(再线等候,解决以后马上结贴)
- 请问JBuilder有时钟吗?
- spring boot 集成 netty出现java.lang.NullPointerException: childHandler错误
- JAVA的activemq在分布式系统上,多个provider中,队列是共享的吗
可见性只是限制访问,但是内存依然占用,也就是说子类的内存拥有一个完整的父类对象
可以用发射的方式重新设置访问限制,一个子类对象可以访问父类的方法,但反过来,父类对象就访问不了子类的方法
子类不是继承不了,而是不能直接访问,对象变量都是存在的
所谓的谁的范围大谁的范围小,这个问题无法回答为什么子类引用转换为你类引用是向下强制转换?
错了,是父类引用转换为子类引用才要求强制转换。
象一个继承模型:水果、桃子、黄桃、苹果、红苹果、青苹果
继承关系不用解释了吧
你可以说一个苹果是一个水果,这是子类向父类转型,肯定是自动的
如果你拿了一个水果,说它是苹果,这是向子类转型,这才需要强制转换
所有,转型有几个规则就不难理解:
子类向父类转型,是自动的,你可以写:水果 obj = new 苹果();
父类向子因转换,需要强制,并且有可能失败,比如:
水果 obj1 = new 苹果(); // 自动
......
桃子 obj2 = (桃子)obj1; // 要求强制转换,编译可以通过,但运行时报类型转换失败
兄弟之间转型不可以实现,比如
桃子 obj = (桃子)(new 苹果()); // 编译错误