Super关键字 (Java)

Super关键字

  1. super不是引用类型,super中存储的不是内存地址,super指向的不是父类对象.

  2. super代表的是当前子类对象中的父类型特征。

注意: 子类除了构造方法外,可以继承父类的所有属性和方法

  1. 访问父类的属性: super.属性名; 前提是有访问权限
  2. 方法父类的方法: super.方法名(); 前提是有访问权限
  3. 访问父类的构造器: suepr(); 前提是有访问权限
public class Person {
    private String name;

    private void show(){
        System.out.println("123");
    }
}
public class Student extends Person{
    public static void main(String[] args) {
        Person p1 = new Person();
        System.out.println(super.name); // 此处会报错
        p1.show();  // 此处会报错
    }
}

在这里插入图片描述
上面因为private是私有,只能在本类中访问,所以报错

解决方法: 使用getName()获得私有属性

public class Person {
    private String name;

    public void show(){
        System.out.println("123");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public class Student extends Person{
    public static void main(String[] args) {
        Person p1 = new Person();
        System.out.println(p1.getName());
        p1.show();
    }
}

上面的例子示意的是: 子类除了构造方法外,可以继承父类的所有属性和方法,但使用super()前提是有访问权限

如果想访问父类的属性,而由于属性一般设置为是private的,super.属性 无法访问成功,则使用super.方法的方式super.getName()获得私有属性。

super和this一样,都不能用在静态方法中

在构造方法中,若是构造函数的第一行代码没有显式的调用super(…)

那么Java默认都会调用super(),并且递归调用到object里的super()。

super()不能和this()共存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值