Java(十)super关键字

super关键字

简单来说,super关键字在Java中代表的就是父类(Superclass)可以看作是指向父类的专属遥控器

一般来说,super关键字有三类常见的使用场景:

  • 调用父类被覆盖的方法
java 复制代码
class Animal {
    public void eat() {
        System.out.println("动物在吃东西...");
    }
}

class Dog extends Animal {
    @Override
    public void eat() {
        // 先用 super 调用父类原来的方法
        super.eat(); 
        // 再加上子类特有的逻辑
        System.out.println("狗在啃骨头!"); 
    }
}

// 运行 Dog 的 eat() 会输出:
// 动物在吃东西...
// 狗在啃骨头!
  • 调用父类的构造方法(最常用)

这是 super****最重要的作用。 在现实中,"先有父亲,后有儿子"。在程序里也是一样:在创建子类对象之前,必须先初始化它的 父类 部分。

怎么初始化?就是通过在子类的构造方法里,使用 super() 来调用父类的构造方法。

java 复制代码
class Animal {
    String name;
    
    // 父类的构造器
    public Animal(String name) {
        this.name = name;
        System.out.println("父类 Animal 被初始化了,名字叫: " + name);
    }
}

class Dog extends Animal {
    String breed; // 品种
    
    // 子类的构造器
    public Dog(String name, String breed) {
        // 关键点:必须使用 super() 将 name 传给父类去初始化!
        super(name); 
        this.breed = breed;
        System.out.println("子类 Dog 被初始化了,品种是: " + breed);
    }
}

注意:如果要在子类构造器里写 super(),它必须被放在子类构造器的第一行 !否则编译器会直接报错。如果你什么都不写,Java 会默认在第一行悄悄帮你加上一个无参数的 super();

  • 访问父类的同名属性:如果子类和父类定义了名字完全一样 的成员变量(这叫变量隐藏),在子类里想拿到父类的那个变量,就必须加 super.
java 复制代码
class Animal {
    int age = 10; // 父类的 age
}

class Dog extends Animal {
    int age = 2;  // 子类的 age (名字一样)

    public void printAge() {
        System.out.println("狗的年龄: " + age);         // 默认访问子类自己的(输出 2)
        System.out.println("父类动物的年龄: " + super.age); // 使用 super 访问父类的(输出 10)
    }
}
相关推荐
mldong1 小时前
引擎从不发一条消息:jeeflow 的两类扩展点与消息模块的分工
java·架构
君顾12 小时前
智慧零售实战指南:从技术架构到落地方案全解析
java·开发语言·零售
南棱笑笑生2 小时前
20260904实测给飞凌OK3576-C开发板刷入Rockchip原厂的IMG固件【使用飞凌的DTS】切换串口波特率为1.5Mbps
c语言·开发语言·rockchip
zhanghe6873 小时前
es的密码带有特殊字符,导出
java
平头哥技术团队3 小时前
Day 10 | 工欲善其事:VS Code 配置与项目归档
android·开发语言·前端·javascript·html·交互
pnoker3 小时前
IoT DC3 概念解读:把设备抽象成一套语义模板——位号、指令、事件与面向智能体的设备建模
java·人工智能·物联网·iot·dc3
乌萨奇也要立志学C++3 小时前
【洛谷】kmp算法
开发语言·算法
my_realmy3 小时前
Java SE 基础学习笔记(一):面向对象、继承多态、抽象接口与异常(JDK 8)
java·多线程·并发··生产者消费者模式
传奇开心果编程3 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
m0_380743873 小时前
给 Claude API 调用补上超时重试和错误分类
开发语言·人工智能·php