13、super关键字

本文详细介绍了Java中的super关键字,包括其基本概念、语法用法及优点。super可用于访问父类的属性、方法和构造器,有助于实现代码复用并增强程序的可维护性。

1、基本介绍:super代表父类的引用,用于访问父类的属性、方法、构造器

2、基本语法:

(1)访问父类的属性,但不能访问父类的private属性

super.属性名

(2)访问父类的方法,不能访问父类的private方法

super.方法名(参数列表)

(3)访问父类的构造器(只能放在构造器的第一句且只能出现一句)

super(参数列表);
package package20221105;
public class Super01 {
    public static void main(String[] args) {
        Bb t1=new Bb();
        t1.hi();
        t1.ok();
    }
}
/*输出:
name=jack age=10
100 200 300
 */
package package20221105;
public class Aa {
    public int n1=100;
    protected  int n2=200;
    int n3=300;
    private int n4=400;
    public Aa(){}
    public Aa(String name){}
    public Aa(String name,int age){
        System.out.println("name="+name+" age="+age);
    }
    public void test100(){}
    protected void test200(){}
    void test300(){}
    private void test400(){}
}

package package20221105;
public class Bb extends Aa{
    public void hi(){
        //不能访问父类private的属性n4
        System.out.println(super.n1+" "+super.n2+" "+super.n3);
    }
    public void ok(){
        //不能访问父类private的方法test400
        super.test100();
        super.test200();
        super.test300();
    }
    //调用父类构造器
    public Bb(){
        super("jack",10);
    }
}

3、super的优点:

(1)调用父类构造器的好处:分工明确,父类属性由父类初始化,子类的属性由子类初始化

(2)当子类中有和父类中的成员(属性和方法)重名时,为了访问父类的成员,必须通过super,如果没有重名,使用super、this、直接访问是一样的效果

package package20221105;
public class Super01 {
    public static void main(String[] args) {
        Bb t1=new Bb();
        t1.sum();
    }
}
/*输出:
B类的sum()方法
B类的cal()方法...
B类的cal()方法...
A类的cal()方法...
800
800
900
 */
package package20221105;
public class Aa {
    int n1=900;
    public void cal(){
        System.out.println("A类的cal()方法...");
    }
}

package package20221105;
public class Bb extends Aa {
    int n1=800;
    //访问父类的方法
    public void cal() {
        System.out.println("B类的cal()方法...");
    }
    public void sum() {
        System.out.println("B类的sum()方法");
        //找cal方法时,顺序是:
        //(1)先找本类,如果有,则调用
        //(2)如果没有,则找父类(如果有,并可以调用,则调用)
        //(3)如果父类没有,则继续找父类的父类
        //(4)如果找到了,但不能访问,则直接报错(cannot access),且不再继续查找了
        //(5)如果没有找到,则提示方法不存在
        cal();//输出:B类的cal()方法...
        this.cal();//等价于cal,输出:B类的cal()方法...
        super.cal();//直接查找父类,跳过本类,输出:A类的cal()方法...

        //访问父类的属性:
        //先从本类查起,往父类上面查去
        System.out.println(n1);
        System.out.println(this.n1);
        System.out.println(super.n1);//直接从父类查起
    }
}

4、super的访问不限于直接父类,如果爷爷类和本类中有同名的成员,也可以使用super去访问爷爷类的成员;如果多个基类中都有同名的成员,使用super访问遵循就近原则,也要遵守访问权限的相关规则。A→B→C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戏拈秃笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值