0
点赞
收藏
分享

微信扫一扫

【JavaSE】super关键字

c一段旅程c 2022-05-03 阅读 40
java

学习目录

一.super使用场景

在继承关系中,子类的无参构造器默认super()调用父类的
访问父类的属性和方法
调用父类构造器

二.super用法

super代表父类的引用,它用于访问父类的属性,方法,构造器
建立在继承关系之上,依照访问修饰符遵循相应的访问规则
super大部分情况下是可以省略的,子类需要访问父类时,需要显式地写出来
1.super访问父类属性:

  public void hey(){
        this.name=super.name;   
        System.out.println(name);  //输出的是父类的属性
    }

通过一个小例子展示了通过super,访问并输出了父类的name属性
这里的name数据类型是引用类型,就相当于本类中name指向的是父类所对应的属性地址,达到访问父类属性的效果
2.super访问父类方法:

    public void hey(){
        //super可以调用父类的方法不能调用private方法
        super.test100();  //test100为父类中可访问的方法
        super.test200();
        super.test300();
    }

3.访问父类构造器:

  public Person(String name, int age,double score) {
        super(name, age);  //访问父类构造器
        this.score=score;   //子类属性由子类初始化
    }

三.super使用细节

①调用父类构造器可以让我们的分工更明确,因为父类属性是继承而来,所以由父类初始化,而子类中的属性可以由子类来初始化
②当出现特殊性情况,子类中有和父类中的成员方法/属性重名时,为了访问父类成员,必须通过super来指定,这就很大程度上体现了super的作用!例如:

public class Test001 {
    public static void main(String[] args) {
        Test test=new Test();
        test.hey();
    }
}
class Test0001{
    String name="22";
}
class Test extends Test0001{
    String name ="11";
    public void hey(){
        System.out.println(super.name);
    }
}

运行结果:

22

四.super越级访问

super的访问不仅仅局限于邻近的父类,也可以是爷爷类,曾祖父类…:
访问的规则遵循就近原则
有一组继承关系CC—>BB—>AA

例如

class AA{
	int a=888;
}
class BB extends AA{
	int b=88;
}
class CC extends BB{
public void getNum() {
		System.out.println(super.a);
	}
}
public class Test {
	public static void main(String[] args) {
		CC c=new CC();
		c.getNum();
	}
}

运行结果

888

”访问了他的爷爷类“
就近原则示意图:
在这里插入图片描述

五. super与this

thissuper
访问本类属性,没有就从父类查找从父类开始查找属性
访问本类中的方法,没有就从父类查找从父类开始查找方法
调用本类构造器,必须放在构造器首行调用父类构造器,使用时放在首行
表示当前对象用于子类访问父类对象
举报

相关推荐

0 条评论