美文网首页
Java继承

Java继承

作者: 远o_O | 来源:发表于2017-06-05 19:31 被阅读14次
  • 创建子类对象的时候,并不会创建父类对象,但是会调用父类的构造函数,来完成对父类中“域”的初始化,只有这样,才能保证创建出来的对象的完整性。
  • 其实更是为了多态,可以在不创建父类对象的情况下,子类对象的this指针,可以安全的调用父类中没有被重写的公开的方法。
public class Test{
    private int weight;
    
    public Test() {
        System.out.println("Test:" + this);
    }

    public static void main(String[] args) {
        Test test = new SubTest();
        test.setWeight(34);
    }
    
    public int getWeight() {
        return weight;
    }
    
    public void setWeight(int weight) {
        this.weight = weight;
    }
}

class SubTest extends Test{
    public SubTest() {
        System.out.println("SubTest:" + this);
    }
    
}

上面的运行结果为:

image.png

分析:

  • 由运行结果可知,传入到父类构造函数中this指针,其实就是子类对象的地址,并不是父类对象的地址,说明没有创建父类对象。

某S老师相关看法:

在我没有真正了解JVM是如何工作的情况下,我都任何看法都持怀疑的态度

  • 问题一:子类没有继承父类的私有属性,但是继承的实例方法却调用了这个属性,怎么办?
    答: 创建一个dog对象时,并没有创建父类对象,但是在堆中为父类的私有属性分配了空间;调用父类的构造方法需要某个父类的私有属性但是子类并没有继承到的时候,就会到在堆中父类动态绑定的私有属性空间里找到对应的属性,然后对该属性进行初始化。
  • 创建一个子类对象的过程:
  • 在堆中给子类对象开辟空间的时候,会先在对象空间中,给继承的属性开辟空间,然后在堆中给父类的私有属性开辟一个空间,并把这块空间跟父类绑定;再在堆中对象空间中开辟方法空间,把从父类继承的方法加载进去,再把子类的方法加载进去,如果子类有方法与从父类继承的方法 方法名和参数签名相同,那就覆盖了父类的该方法
    在给子类对象属性设值的时候,会把子类的地址传给父类的构造方法,当调用父类的构造方法进行设值的时候,会找到跟父类动态绑定的私有属性,进行设值;再调用子类的构造方法为子类的属性设值;
  • 关于继承的内存图:
image.png

相关文章

  • Java继承

    一、Java继承详解 Java继承目录:1.为什么要”继承“?2.继承的类型2.1 单继承2.2 多重继承2.3 ...

  • Java继承

    Java继承 一、继承类型 Java不支持多继承,但是支持多重继承 二、继承的特性 子类拥有父类非 private...

  • JAVA语言第二课

    JAVA面向对象——四大特征 继承篇——extendsJava 继承继承的概念继承是java面向对象编程技术的...

  • java培训专家介绍java的特性之:继承

    java培训专家介绍java的特性之:继承 什么是继承?java特性继承又是什么?在线教育平台专家为你解答! 多个...

  • JAVA 核心笔记 || [7] 继承

    继承 被继承的类为 基类 或者 父类 类 只能单继承 不可同时继承多类 Animal.java Dog.java ...

  • 继承

    java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是可实现多接口。 1:成员变量。当子父类...

  • 2017-12-29

    Java学习日记(4) 主要谈一下——继承extends 个 Tips : Java不像c++,Java是单继承(...

  • JAVA核心技术总结(五六章)继承&接口与内部类

    第五章 继承 在Java中,所有的继承都是公有继承,没有C++的私有继承和保护继承 Java同C++一样,子类不能...

  • Java初级笔记No.3(更新中)

    2018.7.26 1、Java中的继承 Java中使用extends关键字来说明继承关系。 2、继承的特性 ja...

  • Java中的继承

    Java中的继承 Java 继承 什么是继承 继承是用来描述“is-a”的关系;如果说两个对象A和B,若可以描述成...

网友评论

      本文标题:Java继承

      本文链接:https://www.haomeiwen.com/subject/ishwfxtx.html