super关键字
一:概念
-
Java中的super关键字是一个引用变量,用于引用父类对象。关键字“super”以继承的概念出现在类中。
-
super代表父类,而super()则代表父类的构造函数,可以使用super代替父类中的属性或方法。
-
在定义构造函数时,应将调用父类构造函数的代码“super()”,置于调用父类构造函数的方法内部的最顶端,因为首先必须初始化继承自父类的成员。
二:主要作用
- 调用父类的方法
- 调用父类的属性(变量)
- 调用父类的构造器
三:使用
super.属性
public class T2_super {
public static void main(String[] args) {
Student s1 = new Student(); // 实例化类
s1.t1_super(); // 调用子类方法
s1.ShowName(); // 调用父类方法
}
}
// 父类
class People {
/*
* 父类属性
*/
String name;
String sex;
int age;
/*
* 父类方法
*/
public void ShowName() {
System.out.println("姓名:" + this.name);
}
}
// 子类
class Student extends People {
public void t1_super()
// 利用super调用父类属性
{
super.name = "张三"; // 访问父类属性 name 并赋值
}
}
// 运行结果
姓名:张三
super.方法
public class T2_super {
public static void main(String[] args) {
Student s1 = new Student();
s1.t2_super();
}
}
// 父类
class People {
/*
* 父类属性
*/
String name;
int age;
String sex;
/*
* 父类方法
*/
public void setName(String name)
{
this.name = name; // 设置name属性
}
public void ShowName()
// 打印name属性
{
System.out.println("姓名:" + this.name);
}
}
// 子类
class Student extends People {
public void t2_super()
// 调用父类方法
{
super.setName("李四"); //调用父类方法
super.ShowName; //父类打印name方法
}
}
// 运行结果
姓名:李四
super.构造器
- 子类中所有的构造器默认都会访问父类中空参的构造器
- 当父类中没有空参数的构造器时,子类的构造器必须通过this(参数列表)或superr(参数列表)语句指定调用本类或者父类中相应的构造器,且必须放在构造器的第一行
public class T2_super {
public static void main(String[] args) {
Student s1 = new Student("王二");
s1.ShowName();
}
}
// 父类
class People {
/*
* 父类属性
*/
String name;
int age;
String sex;
/*
* 父类方法
*/
public People(String name)
// 父类构造器
{
this.name = name;
}
public void ShowName() {
System.out.println("姓名:" + this.name);
}
}
// 子类
class Student extends People {
public Student(String name)
//调用父类构造器
{
super(name); //构造器首行
}
}
// 运行结果
姓名:王二
四:注意
-
super的追溯不限于直接父类 (如:多层继承)
-
尤其当子父类出现同名成员时,可以用super进行区分
-
super和this用法相似,this代表本类对象的引用,super代表父类的内存空间的标识
-
在父类只有有参构造可以使用的时候,子类必须显示的构建一个构造来“继承”父类的有参构造,并且调用父类方法要写在第一行
-
如果子类构造器中既未显式调用父类或本类的构造器,且父类中又没有无参的构造器,则编译出错
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?