Java中super关键字怎么用

发布时间:2022-02-28 10:05:50 作者:iii
来源:亿速云 阅读:144

Java中super关键字怎么用

在Java编程语言中,super关键字是一个非常重要的概念,尤其在处理继承关系时。super关键字主要用于调用父类的构造方法、访问父类的成员变量和方法。本文将详细介绍super关键字的用法,并通过示例代码帮助读者更好地理解其应用场景。

1. super关键字的基本概念

super关键字在Java中用于引用当前对象的父类。它主要有以下几种用途:

  1. 调用父类的构造方法:在子类的构造方法中,可以使用super()来调用父类的构造方法。
  2. 访问父类的成员变量:当子类和父类中有同名的成员变量时,可以使用super关键字来访问父类的成员变量。
  3. 调用父类的方法:当子类重写了父类的方法时,可以使用super关键字来调用父类的方法。

2. 调用父类的构造方法

在Java中,子类的构造方法默认会调用父类的无参构造方法。如果父类没有无参构造方法,或者你想调用父类的有参构造方法,那么必须显式地使用super关键字来调用父类的构造方法。

2.1 调用父类的无参构造方法

class Animal {
    Animal() {
        System.out.println("Animal constructor");
    }
}

class Dog extends Animal {
    Dog() {
        super(); // 调用父类的无参构造方法
        System.out.println("Dog constructor");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
    }
}

输出结果:

Animal constructor
Dog constructor

在这个例子中,Dog类的构造方法中使用了super()来调用Animal类的无参构造方法。即使不显式地写super(),Java编译器也会自动插入super()来调用父类的无参构造方法。

2.2 调用父类的有参构造方法

class Animal {
    String name;

    Animal(String name) {
        this.name = name;
        System.out.println("Animal constructor with name: " + name);
    }
}

class Dog extends Animal {
    Dog(String name) {
        super(name); // 调用父类的有参构造方法
        System.out.println("Dog constructor with name: " + name);
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Buddy");
    }
}

输出结果:

Animal constructor with name: Buddy
Dog constructor with name: Buddy

在这个例子中,Dog类的构造方法中使用了super(name)来调用Animal类的有参构造方法。由于父类没有无参构造方法,因此必须显式地调用父类的有参构造方法。

3. 访问父类的成员变量

当子类和父类中有同名的成员变量时,可以使用super关键字来访问父类的成员变量。

class Animal {
    String name = "Animal";
}

class Dog extends Animal {
    String name = "Dog";

    void printNames() {
        System.out.println("Dog name: " + name);
        System.out.println("Animal name: " + super.name);
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.printNames();
    }
}

输出结果:

Dog name: Dog
Animal name: Animal

在这个例子中,Dog类和Animal类都有一个名为name的成员变量。在Dog类的printNames方法中,使用super.name来访问父类的name变量。

4. 调用父类的方法

当子类重写了父类的方法时,可以使用super关键字来调用父类的方法。

class Animal {
    void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void makeSound() {
        super.makeSound(); // 调用父类的makeSound方法
        System.out.println("Dog barks");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound();
    }
}

输出结果:

Animal makes a sound
Dog barks

在这个例子中,Dog类重写了Animal类的makeSound方法。在Dog类的makeSound方法中,使用super.makeSound()来调用父类的makeSound方法。

5. super关键字的注意事项

  1. super必须在构造方法的第一行:在子类的构造方法中,super()this()必须出现在第一行。如果两者都不写,编译器会自动插入super()

  2. super不能用于静态上下文super关键字不能用于静态方法或静态代码块中,因为super是用于实例对象的。

  3. super不能用于访问父类的私有成员super关键字不能用于访问父类的私有成员变量或方法。

6. 综合示例

下面是一个综合示例,展示了super关键字在构造方法、成员变量和方法中的使用。

class Animal {
    String name;

    Animal(String name) {
        this.name = name;
        System.out.println("Animal constructor with name: " + name);
    }

    void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    String name;

    Dog(String name) {
        super(name); // 调用父类的有参构造方法
        this.name = "Dog: " + name;
        System.out.println("Dog constructor with name: " + this.name);
    }

    @Override
    void makeSound() {
        super.makeSound(); // 调用父类的makeSound方法
        System.out.println("Dog barks");
    }

    void printNames() {
        System.out.println("Dog name: " + name);
        System.out.println("Animal name: " + super.name);
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Buddy");
        dog.printNames();
        dog.makeSound();
    }
}

输出结果:

Animal constructor with name: Buddy
Dog constructor with name: Dog: Buddy
Dog name: Dog: Buddy
Animal name: Buddy
Animal makes a sound
Dog barks

在这个综合示例中,Dog类继承了Animal类,并使用了super关键字来调用父类的构造方法、访问父类的成员变量和方法。

7. 总结

super关键字在Java中扮演着重要的角色,尤其是在处理继承关系时。通过super关键字,子类可以调用父类的构造方法、访问父类的成员变量和方法。理解并正确使用super关键字,有助于编写出更加清晰、可维护的代码。

希望本文能够帮助读者更好地理解super关键字的用法,并在实际编程中灵活运用。

推荐阅读:
  1. Java中this和super关键字如何使用
  2. es6中super关键字怎么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java super

上一篇:如何使用html5制作loading图

下一篇:如何使用css样式制作好看的表单样式

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》