前面我们已经说明了什么是继承?继承的好处弊端等,不清楚的可参照链接 java 继承(上)-CSDN博客
本篇文章主要理解super和this的区别及联系。
1、super
本章节主要说明怎么访问方法内的变量,类内的成员变量,父类的成员变量,下面先看代码实现。
1.1 代码实现
(1)Fu类的代码实现
public class Fu {
int age = 40;
}
(2)Zi类的代码实现
public class Zi extends Fu{
public int age = 30;;
public void method(){
int age = 20;
//访问方法内的局部变量 age
System.out.println(age);
//访问本类的成员变量 age
System.out.println(this.age);
//访问父类的成员变量 age
System.out.println(super.age);
}
}
(3)Test类的代码实现
public class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.method();
}
}
(4)运行结果
1.2 super总结
(1)super 关键字的用法和 this 关键字的用法相似
- this:代表本类对象的引用;
- super:代表父类存储空间的标识,也可以理解为父类对象引用。
(2)super和this的区别
关键字 | 访问成员变量 | 访问构造方法 | 访问成员方法 |
this | this.成员变量 访问本类成员变量 | this(...) 访问本类构造方法 | this.成员方法(...) 访问本类成员方法 |
super | super.成员变量 访问父类成员变量 | super(...) 访问父类构造方法 | super.成员方法(...) 访问父类成员方法 |
说明:this关键字指向调用该方法的对象,一般我们是在当前类中使用this关键字,所以我们常说this代表本类对象的引用。
2、super内存图分析
2.1 代码实现
(1)Fu类的代码实现
public class Fu {
public int age = 40;
public Fu() {
System.out.println("父类的无参构造方法被调用。。");
}
public void method() {
System.out.println("父类的method方法被调用。。");
}
}
(2)Zi类的代码实现
public class Zi extends Fu{
int age = 30;
public Zi(){
System.out.println("子类中无参构造方法被调用。。");
}
public void show(){
int age =20;
System.out.println(age);
System.out.println(this.age);
System.out.println(super.age);
}
}
(3)Test类的代码实现
public class Test {
public static void main(String[] args) {
Zi z = new Zi();
z.show();
z.method();
}
}
(4)运行结果
2.2 内存图分析
(1)执行Zi z = new Zi();
(2)其实上面的Zi z = new Zi(); 没有执行完,new Zi()的时候它会去调用Zi类的构造方法,所以,Zi类的构造方法进栈;
(3)上面的Zi z = new Zi(); 还是没有执行完,Zi类构造方法的第一条语句如果没有特别写出的话,它会默认调用父类的构造方法,也就是说,它默认有个super(),即下面的语句是相同的。
(4)所以,它会找到Fu类的构造方法;
(5)然后,看下父类里面的东西有没有需要初始化的成员变量,发现存在成员变量age,所以它会进行初始化,并把Fu的构造方法加载到栈内存中。
(6)开始执行Fu类构造方法的内容。
(7)Fu类构造方法执行完,出栈,然后Zi类的构造方法继续往下执行。
(8)Zi类构造方法执行完,出栈,然后Zi z = new Zi(); 执行完毕。开始执行z.show();方法,show方法进栈。
(9)直接输出局部变量age的值。
(10)由于有this调用,所以直接输出Zi类成员变量age的值。
(11)由于super调用,所以直接输出Fu类成员变量age的值。
(12)show方法执行完,出栈,执行z.method(); 由于在Zi类中没有该方法,所以它会去Fu类中去找,Fu类中有,所以method();进栈,本篇文章不做讲解,可自行画出。
本文为学习笔记,所参考文章均已附上链接,若有疑问请私信!
创作不易,如果对你有点帮助的话麻烦点个赞支持一下!
新手小白,欢迎留言指正!
标签:java,Zi,构造方法,继承,age,super,public,Fu From: https://blog.csdn.net/m0_59748326/article/details/136885108