一、super
01.1定义:
- 代表父类的空间的一个表示,你可以认为是父类的一个对象,可以使用super去访问父类的数据。
- super()访问父类的空参构造。
- super.成员变量名,访问父类的成员变量
- super.成员方法,访问父类的成员方法
01.2我们在创建子类对象时,为什么会先去调用父类构造。
-
因为子类要继承父类的数据,甚至要使用父类的数据所以在初始化子类的时候,先要调用父类的构造方法,来完成父类的数据初始化,才能够继承父类的数据和使用父类的方法。
-
在每个类的构造方法中的第一行,有一行某人语句是super()会去调用父类的空参构造,来完成数据的初始化。
-
Java继承体系中的顶层父类是object类,所有类都是直接或间接继承自他。
如果说父类没有空参构造。
想办法调用父类有参构造
01.3:this和super的区别
this 代表的是本类对象的引用
super 代表的是父类存储空间的标识(可以理解成父类的引用,可以操作父类的成员)
this和super的使用
调用成员变量
this.成员变量 调用本类的成员变量
super.成员变量 调用父类的成员变量
调用构造方法
this(...) 调用本类的构造方法
super(...) 调用父类的构造方法
调用成员方法
this.成员方法 调用本类的成员方法
super.成员方法 调用父类的成员方法
注意:this和super不同时存在在构造方法里面
案例演示1:
package com.Homework.day08;
public class Demo9 {
public static void main(String[] args) {
B b=new B(100);
System.out.println(b.x);
}
}
class A{
int x=0;
A(int w){
x=w;
}
}
class B extends A{
int x=0;
B(int w){
super(w);
x=w+1;
}
}//101
01.4继承中构造方法的注意事项
案例演示
父类没有无参构造方法,子类怎么办?
a: 在父类中添加一个无参的构造方法
b:子类通过super去显示调用父类其他的带参的构造方法
c:子类通过this去调用本类的其他构造方法
本类其他构造也必须首先访问了父类构造
注意事项
super(…)或者this(….)必须出现在第一条语句上
案例演示:
package com.Homework.day08.qingzi;
public class Fu {
static {
System.out.println("静态代码块Fu"); //1
}
{
System.out.println("构造代码块Fu");
}
public Fu() {
System.out.println("构造方法Fu");
}
}
---------------------
package com.Homework.day08.qingzi;
public class Zi extends Fu{
static {
System.out.println("静态代码块Zi");//2
}
{
System.out.println("构造代码块Zi");
}
public Zi() {
super();
System.out.println("构造方法Zi");
}
}
----------------------
package com.Homework.day08.qingzi;
public class Demo2 {
public static void main(String[] args){
Zi z = new Zi(); //请执行结果。
}
}
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi