先说说我的目的,就是利用已经被向上转型的对象去访问子类中特有的函数,于是通过代码中(===正常部分===)实现了。但我现在想用另外一种办法去达到相同的目的,于是就有了代码中(===试验部分===)。那么我想问问大家,为什么代码中(===试验部分===)会编译失败呢??!!!
- class Fu{
- void show(){
- System.out.println("父类");
- }
- }
- class Zi extends Fu{
- void show(){
- System.out.println("子类");
- }
- void fun(){
- System.out.println("子类特有的函数");
- }
- }
- class Test{
- public static void main(String[] args){
-
- //================正常部分开始=====================
-
- Fu f = new Zi(); //向上转型
-
- Zi a = new Zi();//创建子类对象
- a.fun();//调用子类特有函数
-
- Zi b = (Zi)f;//向下转型
- b.fun();//调用子类特有函数
-
- //================正常部分结束=====================
-
-
- //================试验部分开始=====================
-
- f = (Zi)f;//尝试以这种方式向下转型
- if(f instanceof Zi){
- System.out.println("f现在是子类");//这里成功打印,说明 f = (Zi)f 这句话应该没什么问题吧
- }
- f.fun();//这里编译错误,提示 父类中没有fun()的这个函数
-
- //================试验部分结束=====================
- }
- }
复制代码
|