前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >继承中的构造方法内存处理

继承中的构造方法内存处理

作者头像
星哥玩云
发布2022-09-14 19:49:21
4710
发布2022-09-14 19:49:21
举报
文章被收录于专栏:开源部署

1、继承关系内存解释

实际上在面向对象第一天的讲解当中,我们对内存方面做了一些隐瞒。因为除了Object类,所有的类都是有父类的。但是我们在考虑内存图时忽略了这点,现在,我们来简单描述加入了子父类关系后的对象内存图。

1.1、案例

代码语言:javascript
复制
//定义父类
class Person {
    private String name;
    private int age;
    public Person(){}
    public Person(String name,int age) {
        this.name = name;
        this.age = age;
    }
    //get/set方法
}
//定义子类
class Chinese extends Person{
    private String address;
    public Chinese(){}
    public Chinese(String name,int age,String address) {
        super(name,age);
        this.address = address;
    }
    //对address的get/set
}
代码语言:javascript
复制
//定义测试类,使用子类创建对象
public class TestDemo{
    public static void main(String args[]){
        Chinese c = new Chinese("AngelaBaby",18,"北京海淀区上地7街晋福公寓");
    }
}

1.2、内存图

image20200113150228603.png
image20200113150228603.png

2、向上转型与向下转型内存解释

2.1、向上转型

当出现多态时,引用为Person类型,对象为Chinese对象,此时,由于Chinese中包含了父类所有成员,所以可以访问父类非私有的一切。对外表现的就”像个父类对象一样”。

仅仅在调用方法时,会调用子类重写后的方法。

代码语言:javascript
复制
Person p=new Chinese();

2.2、向下转型

当出现多态后,父类Person引用指向子类对象,当强转为子类引用时,由于堆内存当中存储的仍为子类对象,包含子类的一切成员。所以可以转型成功。

但是,如果没有出现多态,仅仅创建父类对象(如果父类不是抽象类的话),则为父类Person的引用指向Person的对象,没有子类的对象。此时如果强转为子类对象,则不包含子类的一些属性与功能,所以强转失败。

代码语言:javascript
复制
//父类对象强转子类对象
Person p=new Chinese();
Chinese c=(Chinese)p;
代码语言:javascript
复制
//父类对象强转子类对象
Person p=new Person();
Chinese c=(Chinese)p;

2.3、案例

代码语言:javascript
复制
class Fu {
    String name = "父类名字";
}

class Zi extends Fu {
    String name = "子类名字";
    public void method(){
        String name = "局部名字";
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
}
public class FuTest{
    public static void main(String[] args) {
        Fu fu = new Zi();
        System.out.println(fu.name);
        Zi zi = (Zi)fu;
        System.out.println(zi.name);
    }
}

运行结果:

image20200114140438187.png
image20200114140438187.png

2.4、内存图

image20200114142107104.png
image20200114142107104.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、继承关系内存解释
    • 1.1、案例
      • 1.2、内存图
      • 2、向上转型与向下转型内存解释
        • 2.1、向上转型
          • 2.2、向下转型
            • 2.3、案例
              • 2.4、内存图
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档