java中父类与子类的转换问题

本文探讨了Java中关于父类与子类对象转换的问题,包括子类对象如何转换为父类对象,以及如何将父类对象转换为子类对象,通过实例代码进行解析。
今天楼主结课测试,结果被一道说难不难,说简单不简单的题目搞晕了,充分说明了楼主的基础不扎实,很多细节没有搞清晰,就包括这一个经典的父类与子类的转换问题。今天总结一下。

1、子类对象转换为父类对象

看一段代码:

package com;

public class Test {

    public static void main(String[] args) {
        Fu foo = new Zi();
        foo.print_info();
    }
}

class Fu{
    public void print_info(){
        System.out.println("父类的print_info");
        fun();
    }
    public void fun(){
        System.out.println("我是父类!");
    }
}
class Zi extends Fu{
    public void fun(){
        System.out.println("我是子类!");
    }
}
这段程序的输出是:父类的print_info 我是子类!
楼主之前觉得答案是:父类的print_info 我是父类!觉得既然将子类的对象转换为了父类的对象,为何会调用子类的fun()方法?
看了看别人写的理解,这个foo是一个引用类型的变量,new这个关键字才表明在在堆中分配了一段空间来存放类Zi中的数据,并返回一个Zi的对象,并赋值给Fu的引用foo,即foo指向子类的对象,此时,子类的对象并没有定义一个名字。相当于,Zi s = new Zi(); Fu foo = s;

2、父类对象转换为子类对象

package com;


import java.util.Arrays;
import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Fu foo = new Zi();
        Zi zoo = (Zi)foo;//将父类的对象强制转换为子类对象,只能通过父类指向子类对象的引用来强制转换
        zoo.print_info();
    }
}

class Fu{
    public void print_info(){
        System.out.println("父类的print_info");
        fun();
    }
    public void fun(){
        System.out.println("我是父类!");
    }
}
class Zi extends Fu{
    public void fun(){
        System.out.println("我是子类!");
    }
}
上面的代码的运行结果也是:父类的print_info 我是子类!
如果我们用Zi zoo = new Fu();这里时会报错的,我们可以这样理解,子类继承了父类,肯定会比父类拥有更多的东西,所以这样直接转换,报错。
也可以这样:
 在前面加一条判断语句 if(father instanceof Son);防止报ClassCastExcept异常。
                  如:
                        Father  f  =   new  Son();  //父类引用指向子类对象
                        if(father instanceof Son)
                       {
                                 Son   s2  =  (Son)f;
                      }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值