1460 字
约 4 分钟
11
Java super关键字
无标签

第30章 Java super关键字

面包屑导航 章节标题 学习目标

学习目标

  • 理解super关键字的作用和使用场景
  • 掌握使用super调用父类构造方法
  • 学会使用super访问父类的属性和方法
  • 理解super与this关键字的区别
  • 掌握在方法重写中使用super的技巧
  • 了解多层继承中super的使用

super关键字概述

super关键字概述

super关键字是Java中用于访问父类成员的重要关键字。它提供了一种明确的方式来引用父类的属性、方法和构造方法,在继承和方法重写中发挥着关键作用。

super关键字的主要用途调用父类构造方法:使用super()调用父类的构造方法访问父类方法:使用super.methodName()调用父类方法访问父类属性:使用super.fieldName访问父类属性

super调用父类构造方法

super调用父类构造方法

基本语法

super()用于调用父类的构造方法,必须是子类构造方法的第一条语句。

class Animal {
    protected String name;
    protected int age;
    
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("创建动物: " + name + ", 年龄: " + age);
    }
}

class Dog extends Animal {
    private String breed;
    
    public Dog(String name, int age, String breed) {
        super(name, age);  // 调用父类构造方法
        this.breed = breed;
        System.out.println("创建狗狗,品种: " + breed);
    }
}

重要规则super()必须是构造方法的第一条语句如果不显式调用super(),编译器会自动插入super()如果父类没有无参构造方法,子类必须显式调用父类的有参构造方法不能在静态方法中使用super

super访问父类方法

super访问父类方法

在方法重写时,可以使用super.methodName()来调用父类的方法,这样可以在保留父类功能的基础上扩展新功能。

class Animal {
    public void eat() {
        System.out.println("动物正在吃东西");
    }
}

class Dog extends Animal {
    @Override
    public void eat() {
        super.eat();  // 调用父类的eat方法
        System.out.println("狗狗喜欢吃骨头和狗粮");
    }
}

使用场景

  • 扩展父类功能:在重写方法中先调用父类方法,再添加新功能
  • 避免代码重复:复用父类已有的逻辑
  • 保持一致性:确保子类行为与父类保持一致

super访问父类属性

super访问父类属性

当子类和父类有同名属性时,可以使用super.fieldName来明确访问父类的属性。

class Vehicle {
    protected String type = "交通工具";
}

class Car extends Vehicle {
    private String type = "汽车";
    
    public void showTypes() {
        System.out.println("子类type: " + this.type);    // 汽车
        System.out.println("父类type: " + super.type);   // 交通工具
    }
}

super与this的区别

super与this的区别

关键字 作用 示例 使用场景
super 访问父类成员 super.method() 调用父类方法、访问父类属性
this 访问当前类成员 this.method() 访问当前类属性、调用当前类方法
super() 调用父类构造方法 super(param) 子类构造方法中调用父类构造方法
this() 调用当前类其他构造方法 this(param) 构造方法重载时的相互调用

完整代码示例

完整代码示例

以下是一个完整的示例,展示了super关键字在实际开发中的应用:

/**
 * super关键字基础示例
 * 演示super关键字的基本用法
 */

class Animal {
    protected String name;
    protected int age;
    
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("创建动物: " + name + ", 年龄: " + age);
    }
    
    public void eat() {
        System.out.println(name + "正在吃东西");
    }
    
    public void showInfo() {
        System.out.println("动物信息 - 名称: " + name + ", 年龄: " + age);
    }
}

class Dog extends Animal {
    private String breed;
    
    public Dog(String name, int age, String breed) {
        super(name, age);  // 调用父类构造方法
        this.breed = breed;
        System.out.println("创建狗狗,品种: " + breed);
    }
    
    @Override
    public void eat() {
        super.eat();  // 调用父类方法
        System.out.println("狗狗喜欢吃骨头和狗粮");
    }
    
    public void bark() {
        System.out.println(super.name + "正在汪汪叫");
    }
    
    @Override
    public void showInfo() {
        super.showInfo();  // 调用父类方法
        System.out.println("品种: " + breed);
    }
}

public class SuperBasicExample {
    public static void main(String[] args) {
        Dog myDog = new Dog("旺财", 3, "金毛");
        
        myDog.eat();
        myDog.bark();
        myDog.showInfo();
    }
}

💻 查看完整代码 - 在线IDE体验 最佳实践

最佳实践

推荐做法明确性:即使不是必需的,使用super也能提高代码可读性扩展功能:在重写方法时,先调用super方法,再添加新功能避免重复:利用super复用父类代码,避免重复实现构造方法链:合理使用super()建立清晰的构造方法调用链

常见误区在静态方法中使用super(编译错误)super()不是构造方法的第一条语句同时使用super()和this()(不允许)过度使用super导致代码复杂

本章小结

本章小结

  • super关键字用于访问父类的成员,包括属性、方法和构造方法
  • super()必须是子类构造方法的第一条语句
  • 使用super.methodName()可以调用父类方法,常用于方法重写
  • super.fieldName用于访问父类属性,特别是同名属性时
  • super与this的区别:super访问父类成员,this访问当前类成员
  • 合理使用super可以提高代码复用性和可读性
  • super不能在静态方法中使用,因为它与实例相关

导航链接 上一章:Java继承 章节测试 下一章:Java多态 JavaScript

Java super关键字
https://clxhxhhr.top/posts/2731/
作者
clxstart
发布于
2026-09-19
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。