数码蛋 2017-03-29 07:36 采纳率: 20%
浏览 3882
已采纳

java多态中怎么理解父类可以自动接收子类实例化对象

刚刚看视频里面提到的一句话“父类可以自动接收子类实例化对象”,这句话怎么理解求大神解释

class A {
    public void fun() {
        System.out.println("A public void fun()");
    }
}

class B extends A {
    public void fun() { // 核心方法
        System.out.println("B public void fun()");
    }

    // 是子类扩充的方法
    public void printB() { // 非核心方法
        System.out.println("B public void printB()");
    }
}

class C extends A {
    public void fun() {
        System.out.println("C public void fun()");
    }
}

public class TestDemo {
    public static void main(String args[]) {
        get(new B());
        get(new C());
    }
    public static void get(A a){
        a.fun();
    }
}
  • 写回答

5条回答 默认 最新

  • auerjds 2017-03-29 08:12
    关注

    ”父类可以自动接收子类实例化对象“这句话就是指父类可以接受子类对象。理解层面:猫、狗都属于动物,Animal a = new Dog();
    你贴出来的代码,B中的fun方法是对父类A中的fun方法进行的覆盖重写,printB()方法是B类中特有的方法。你的TestDemo中get(new B())和get(new C());
    打印的结果是:
    B public void fun()
    C public void fun()
    为了更好的理解,可以将TestDemo中的代码修改一下:
    A a1 = new B(); // a1 父类自动接收了子类的实例化对象。
    a1.fun();
    A a2 = new C(); //a2 父类自动接受了子类的实例化对象。
    a2.fun();
    打印的结果与上面一致。
    a1.printB();
    打印结果是:B public void printB()

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 有没有人会打学生成绩管理系统呀
  • ¥15 在使用Fiddler和夜神模拟器抓包的时候一直出现443该怎么办啊QAQ搜了好几个笔记都没有解决
  • ¥15 3x7的二维数组A、B、C,A中的任意1个数组元素与B的任意1个数组元素、同时又与C的任意1个数组元素比较,把不同位置出现相同数的比较称为无意义,反之称为有意义,把有意义的比较打印输出。
  • ¥20 预测模型怎么处理原始数据(随机森林)
  • ¥20 请问discuz3.5如何实现插入ckplayer全能播放器功能呢?
  • ¥15 thingsboard代码编译出错误
  • ¥15 博途v18仿真报错怎么解决
  • ¥15 欧姆龙plc枕式包装机 ST编程
  • ¥15 为啥快手广告联盟的广告这么难出来
  • ¥15 k8s集群重启后,kubelet一直报systemctl restart kubelet.service "Failed to delete cgroup paths"