博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
super关键字
阅读量:4316 次
发布时间:2019-06-06

本文共 1656 字,大约阅读时间需要 5 分钟。

一.super关键字作用

1:主要存在于子类方法中,用于指向子类对象中父类对象。

2:访问父类的属性

3:访问父类的函数

4:访问父类的构造函数

下面看一个例子:

class FatherClass {    public int value;     public void f(){         value = 100;        System.out.println        ("FatherClass.value="+value);    }}class ChildClass extends FatherClass {    public int value;    public void f() {        super.f();        value = 200;        System.out.println             ("ChildClass.value="+value);        System.out.println(value);        System.out.println(super.value);    }}public class TestInherit {	public static void main(String[] args) {		ChildClass cc = new ChildClass();		cc.f();	}}  

 

结合上面程序在内存中的分布图如下:

首先从函数的入口进行分析

 

ChildClass cc = new ChildClass();

程序执行到这里时,首先在栈空间里面会产生一个变量cc,cc里面的值是什么这不好说,总而言之,通过这个值我们可以找到new出来的ChlidClass对象。由于子类ChlidClass是从父类FatherClass继承下来的,所以当我们new一个子类对象的时候,这个子类对象里面会包含有一个父类对象,而这个父类对象拥有他自身的属性value。这个value成员变量在FatherClass类里面声明的时候并没有对他进行初始化,所以系统默认给它初始化为0,成员变量(在类里面声明)在声明时可以不给它初始化,编译器会自动给这个成员变量初始化,但局部变量(在方法里面声明)在声明时一定要给它初始化,因为编译器不会自动给局部变量初始化,任何变量在使用之前必须对它进行初始化。

子类在继承父类value属性的同时,自己也单独定义了一个value属性,所以当我们new出一个子类对象的时候,这个对象会有两个value属性,一个是从父类继承下来的value,另一个是自己的value。在子类里定义的成员变量value在声明时也没有给它初始化,所以编译器默认给它初始化为0。因此,执行完第一句话以后,系统内存的布局如下图所示:

 

 

 接下来执行第二句话:

cc.f();

当new出来一个对象的时候,这个对象会产生一个this的引用,而这个this的引用是指向自身,如果new 出来的对象是一个子类的对象的话,那么这个子类的对象里面会有一个super 去指向父类对象,因此,在这句话中产生了一个this,this指向自身,自身有一个super指向父类对象

在这个程序中子类的ChildClass方法重写了f()方法,之后又继承了父类的f()方法,此时的vaule是100,打印出 FatherClass.value=100 程序回到子类ChildClass中,此时的value值变成了200,打印ChildClass.value=200,当然后面打印的value值是子类的也就是200,而super.value是父类的value值也就是100,内存分布图如下所示:

 

posted on
2018-12-24 16:46  阅读(
...) 评论(
...) 收藏

转载于:https://www.cnblogs.com/white-the-Alan/p/10169454.html

你可能感兴趣的文章
springcloud微服务实战--笔记
查看>>
View(视图)——菜单Menu
查看>>
uva 408 Uniform Generator
查看>>
SharePoint 2010 类似人人网站内信功能实施
查看>>
CF 327E(Axis Walking-状态压缩Dp-lowbit的使用)
查看>>
object对象java 利用反射 从数据库取出数据对象list 类似hibernate
查看>>
插入返回ibatis 的selectKey 实现插入数据后获得id
查看>>
vim 程序编辑器
查看>>
LIS(单调队列优化 C++ 版)(施工ing)
查看>>
如何为winform程序打包(图解)
查看>>
如何给行内元素设置宽高?
查看>>
刚接触Vuex
查看>>
四种加载React数据的技术对比(Meteor 转)
查看>>
Airthmetic_Approching
查看>>
操作文本文件
查看>>
公司项目的几个问题
查看>>
解决win7下打开Excel2007,报“向程序发送命令时出现问题”的错误
查看>>
Velocity快速入门教程
查看>>
Google的小秘密
查看>>
(转)什么是JSON+如何处理JSON字符串
查看>>