3.0 java中继承中的super作用
2026/7/2 6:43:53 网站建设 项目流程

一句话总结它的作用:super 代表的是“父类”(或者叫超类、基类)空间,用来在子类中访问父类的成员(属性、方法、构造器)。

1. 使用场景一:用 super 调用父类的构造器(最常用)

当你在 new 一个子类对象时,子类的构造器必须先调用父类的构造器,确保从父类继承过来的属性能够被正确初始化。

🚨 核心规则:隐式调用
如果你在子类的构造器里没有手动写 super(),Java 编译器会在第一行自动帮你加上 super();(调用父类的无参构造器)。

classFather{publicFather(){System.out.println("1. 父类无参构造器被调用");}}classSonextendsFather{publicSon(){// 编译器在这里偷偷加了一行:super();System.out.println("2. 子类构造器被调用");}}

当你 new Son() 时,控制台会先打印 1,再打印 2。

💡 显式调用:父类没有无参构造器怎么办?
如果父类只定义了带参数的构造器,编译器就不会自动加 super() 了。这时子类必须手动显式调用 super(参数),否则编译直接报错。

classFather{StringlastName;// 父类只有带参构造器publicFather(StringlastName){this.lastName=lastName;}}classSonextendsFather{intage;publicSon(StringlastName,intage){super(lastName);// 🚨 必须手动调用父类带参构造器,且必须写在第一行!this.age=age;}}

2. 使用场景二:用 super 区分同名的属性(成员变量)

如果子类起了一个和父类一模一样的变量名,父类的变量就会被“隐藏”。此时如果你想在子类中访问父类的那个变量,就需要加上 super. 前缀。

classFather{Stringname="张三(老爸)";}classSonextendsFather{Stringname="张小三(儿子)";publicvoidshow(){System.out.println(name);// 打印:张小三(儿子) —— 默认就近原则System.out.println(this.name);// 打印:张小三(儿子) —— 显式指定当前子类System.out.println(super.name);// 打印:张三(老爸) —— 🚨 通过 super 突破限制,访问父类}}

3. 使用场景三:用 super 调用父类被重写(Override)的方法

在面向对象开发中,子类经常会重写父类的方法。但有时候,子类并不想完全抛弃父类的方法,而是想在父类方法的基础上进行“功能增强”。

这时就可以用 super.方法名()。

classRobot{publicvoidwork(){System.out.println("开机,开始扫描环境...");}}classCleaningRobotextendsRobot{@Overridepublicvoidwork(){super.work();// 🚨 先让父类做它该做的事(开机和扫描)System.out.println("开始拖地、擦桌子...");// 子类特有的拓展功能}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询