面向对象--继承--super关键字
super关键字
super的用法和this很像
this代表本类对应的引用。
super代表父类存储空间的标识(可以理解为父类引用)
super与this的使用格式:
-
访问成员变量:
super.成员变量 (访问的是直接父类的成员变量)
this.成员变量 (访问的是本类中成员变量,可以是访问继承自父类中的成员变量)
-
访问成员方法:
super.成员方法 (访问的是直接父类的成员方法)
this.成员方法 (访问的是本类中的方法,可以是访问继承自父类中的成员方法)
-
访问构造方法:
super(...) (访问父类构造方法的方式)
this(...) (访问本类中的构造方法)
程序示例
/*
继承与成员的关系
思考:
现在我们清楚了继承去访问成员的顺序,但是我们想想不仅要输出本类范围中的成员
我还想输出父类中的同名的成员,怎么办呢?
如果有一样东西,和this相似,可以直接访问父类的数据就好了
通过学习后发现,有这样的一个东西,
java提供了一个关键字给我们使用:super
面试题:this关键字与super关键字的区别
this代表的是当前对象的引用
super代表的是当前对象的类继承的父类的引用(可以直接操作父类中的成员)
super与this的使用格式:
访问成员变量:
super.成员变量 (访问的是直接父类的成员变量)
this.成员变量 (访问的是本类中成员变量,可以是访问继承自父类中的成员变量)
访问成员方法:
super.成员方法 (访问的是直接父类的成员方法)
this.成员方法 (访问的是本类中的方法,可以是访问继承自父类中的成员方法)
访问构造方法:
super(...) (访问父类构造方法的方式)
this(...) (访问本类中的构造方法)
*/
class Demo{
int a = 10;
public void fun1(){
int a = 100;
System.out.println(a);
}
}
class DemoZi extends Demo{
int b = 20;
int a = 40;
public void fun2(){
int a = 30;
System.out.println(b);//输出20
System.out.println(a);//输出DemoZi的fun2局部变量30
//----------通过this关键字去访问本类成员变量----------
System.out.println(this.a);//输出结果40
//----------通过super关键字访问父类的成员变量----------
System.out.println(super.a);//输出10
}
}
class DemoSun extends DemoZi{
// 把当前类成员变量a注释掉
// int a = 50;
public void fun3(){
//----------如果本类找不到变量去直接继承父类中查找----------
System.out.println(a);//把本类中成员变量注释掉之后输出直接父类中继承过来的a--输出40
//----------super关键字只能代表直接父类的引用,不能跨层引用----------
System.out.println(super.a);//输出的为直接父类DemoZi中的成员变量a--输出40
//----------当多层继承超过两层之后最上面一层就很难访问到了,只能通过创建对象去访问----------
//Demo demo = new Demo();
//System.out.println(demo.a);
//----------访问父类的fun2你可以通过super去访问,也可以直接去访问,因为继承过来了----------
System.out.println("访问父类的fun2");
//----------super关键字只能代表直接父类的引用,不能跨层引用----------
super.fun2();
}
public void fun4(){
//this 访问本类的成员方法
this.fun3();
//this 不仅可以访问本类的成员方法,还可以访问继承自父类的成员方法
this.fun2();
//this 不仅可以访问本类的成员变量,还可以访问继承自父类的成员变量
System.out.println(this.b);
}
}
public class ExtendsDemo1 {
public static void main(String[] args) {
DemoZi demoZi = new DemoZi();
demoZi.fun2();
DemoSun d = new DemoSun();
d.fun3();
d.fun4();
}
}