首页 > 编程笔记 > Java笔记 阅读:62

Java super关键字的2种用法(非常详细)

super 是 Java 中的一个关键字,本文讲解它的两种用法,分别是:

Java super访问父类的构造方法

在子类的构造方法中,可以使用 super() 来调用父类的无参数构造方法;使用 super(参数列表) 来调用父类的有参数构造方法。

这样可以确保在创建子类对象时,先初始化父类的部分。

【实例】使用关键字super访问父类的构造方法,代码如下:
public class Animal {
    // 定义私有的属性:name
    private String name;
    public Animal() {
        System.out.println("Animal Constructor");
    }
    public Animal(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    // 定义成员方法:eat 方法
    public void eat(){
        System.out.println("Animal 动物吃东西");
    }
}

public class Cat extends Animal{
    public Cat() {
        super();
        System.out.println("Cat Constructor");
    }
    public Cat(String name) {
        super(name);
    }
    @Override
    public void eat() {
        System.out.println("Cat 猫吃猫粮");
    }
    // 子类中特有的方法
    public void sleep(){
        System.out.println("猫在睡觉");
    }
}
在上述代码中,我们可以看出 Cat 类的构造方法使用关键字 super 调用父类的构造方法。super() 调用的是无参数构造方法,super(name) 调用的是带有一个参数的构造方法。

super() 调用的是无参数构造方法,super(参数列表) 调用的是有对应参数的构造方法。

Java super访问方法和属性

当子类和父类有同名的成员变量时,可以使用“super.成员变量名”来访问父类的成员变量。

当子类重写了父类的方法,而在子类的方法中又想调用父类被重写的方法时,可以使用“super.方法名称(参数列表)”来调用。

【实例 2】通过使用关键字 super 实现访问方法和属性,代码如下:
public class Animal {
    // 定义私有的属性:name
    private String name;
    public Animal() {
        System.out.println("Animal Constructor");
    }
    public Animal(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    // 定义成员方法:eat 方法
    public void eat(){
        System.out.println("Animal 动物吃东西");
    }
}

public class Cat extends Animal{
    public Cat() {
        super();
        System.out.println("Cat Constructor");
    }
    public Cat(String name) {
        super(name);
    }
    /*
     * 子类重写了父类的方法
     */
    @Override
    public void eat() {
        super.setName("小动物");
        super.eat();
    }
    // 子类中特有的方法
    public void sleep() {
        System.out.println("猫在睡觉");
    }
}
在上述代码中,我们可以看出,Cat 类中的 eat() 方法可以使用关键字 super 访问父类的属性和父类的方法。

相关文章