super关键字详解

super和this关键字都可以用来覆盖Java语言的默认作用域,使被屏蔽的方法或变量变为可见。在以下场合会出现方法或变量被屏蔽的现象:

场合一:在一个方法内,当局部变量和类的成员变量同名,或者局部变量和父类的成员变量同名时,按照变量的作用域规则,只有局部变量在方法内可见。

场景二:当子类的某个方法覆盖了父类的一个方法时,在子类的范围内,父类的方法不可见。

场景三:当子类中定义了和父类同名的成员变量时,在子类的范围内,父类的成员变量不可见。

请看以下代码:

class Base{
    String var="Base`s Variable";
    void method(){ System.out.println("call Base`s method"); }
}

public class Sub extends Base{
    String var="Sub`s Variable";//隐藏父类的var变量
    void method(){ System.out.println("call Sub`s method"); }//覆盖父类的method方法

    void test(){
        String var="Local variable";//局部变量

        System.out.println("var is"+var);//打印method()方法的局部变量
        System.out.println("this.var is"+this.var);//打印Sub实例的实例变量
        System.out.println("super.var is"+super.var);//打印在Base类中定义的实例变量

        method();//调用Sub实例的method()方法
        this.method();//调用Sub实例的method()方法
        super.method();//调用在Base类中定义的method()方法
    }

    public static void main(String[] args) {
        Sub sub=new Sub();
        sub.test();
    }
}

在Base父类和Sub子类中都定义了成员变量var以及成员方法method(),在Sub类中,可通过super.var和super.method()来访问Base类的成员变量var,以及成员方法method()。

值得注意的是,如果父类中的成员变量和方法被定义为private类型,那么子类永远无法访问它们。

在程序中,在以下情况会使用super关键字:

1)在子类中访问父类的被屏蔽的方法和属性。

2)在类的构造方法中,通过super语句调用这个类的父类的构造方法

注意:假如在子类的构造方法中有super语句,它必须作为构造方法的第一条语句

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值