harley27
V2EX  ›  Java

大家好,关于继承和多态方面,请容我一问

  •  
  •   harley27 · Jul 31, 2019 · 4434 views
    This topic created in 2490 days ago, the information mentioned may be changed or developed.
    用子类构造方法构建的父类对象,
    虽然没有子类独有的方法,
    但可以算作是子类的实例吗?
    Supplement 1  ·  Jul 31, 2019
    我再明晰一下话题:
    比如,设 Crazy 为 Person 的子类,那么
    Person trump = new Crazy();
    虽然 trump 的类属于 Person,但是他也可以被看作是一个 Crazy 的实例吗?
    10 replies    2019-08-14 13:57:09 +08:00
    Sricecake
        1
    Sricecake  
       Jul 31, 2019   ❤️ 2
    内存中是子类实例,编译时只是当做父类对象在用而已。
    Aruforce
        2
    Aruforce  
       Jul 31, 2019
    是在扩展类构造器里创建了基类的实例这个意思? b 和扩展类没任何关系:请贴代码;
    Aruforce
        3
    Aruforce  
       Jul 31, 2019
    @Aruforce b 和基类没任何关系
    Aruforce
        4
    Aruforce  
       Jul 31, 2019
    @Aruforce #3 忘了吧 只看#2
    harley27
        5
    harley27  
    OP
       Jul 31, 2019
    @Aruforce 谢谢回答,虽然我根本还看不懂
    我目前只能按 Sricecake 先生的解释来理解
    frienmo
        6
    frienmo  
       Jul 31, 2019
    没有“父类对象”这个概念。
    马士兵的那句话 父类引用指向子类对象。
    对象,object,instance 才是真正的东西。trump 只是一个你编代码时候的名字,指向了那个实例,又恰好 Java 会检查类型,不让你指向大楼。
    abcbuzhiming
        7
    abcbuzhiming  
       Aug 1, 2019
    在内存里,这个对象是完整 Crazy 类型对象,具备 Crazy 类的所有成员和方法。但是在系统里,除非你显式的进行转换。那么此时这个对象对外暴露的,只有 Person 类型的所有成员。这是类型系统的限制
    silkgrower
        8
    silkgrower  
       Aug 1, 2019 via Android
    这个对象只能调用子类重写了的方法,其他子类的方法都是不能调的
    zisway
        9
    zisway  
       Aug 2, 2019 via Android
    我觉得如果子类没有扩展方法,那么可以看作是子类的实例,运行时,实际调用的还是子类重写的方法。如果子类有扩展方法,那么就不能算,需要进行向下转型,才可调用。
    gaokevin163
        10
    gaokevin163  
       Aug 14, 2019
    当然是 crazy 的一个实例,你用 crazy 的构造函数 new 出来的一个实例,怎么可能是别的类型?最好的让你信服的方法就是自己在代码里动态判断一下这个类型,自己看下到底属于什么类型,就 ok 了 。这种用法其实就是所谓的向上造型,导致这个用法的原因在于多态的需要,而多态产生的原因仅仅是程序员为了实现一个接口多个方法罢了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4287 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 05:26 · PVG 13:26 · LAX 22:26 · JFK 01:26
    ♥ Do have faith in what you're doing.