java中的super()

本文详细解析Java中的this与super关键字的使用规则、区别及应用场景,帮助开发者掌握对象指向与继承关系中的关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

要说super就先要说this。
"this",作为一个特殊的关键字,它的规则如下:
1。可以表示 构造函数传递。this(a,b)表示调用另外一个 构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。
2。可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个final的普通变量,它有静态类型,就是这个类C本身;它有动态类型,就是当前这个对象的类型。你可以对它调用成员函数,把它传递给别的函数,等等等等。只要一个C类型的final变量可以出现的地方,它就可以出现。

"super"。它和"this"类似,但是也有不同的地方。
1。表示调用父类的 构造函数。也是一个特殊语法,不是变量,没有什么类型。

2。可以在一个类的非static成员内部使用。比如super.method()。
但是,注意,这个super.method()只是长得跟some_var.method()一样,一个语法糖而已。实质上,"super"根本不是一个变量。

为什么不是?因为如果是就坏了。java里面有一个 金科玉律:任何public非static函数的调用都是 多态的。
所以,如果super是个变量,也指向当前对象,那么,不管super的静态类型是什么super.method()必然调用的是子类的那个版本,而不会是我们期望的,静态地选择父类的那个版本。

所以,你只要把super.xxx看成一个特殊的语法,比如理解为“super::xxx”就好了。

既然super不是一个变量,那么不能把它象一个普通变量那样"==",或者传递给某个函数就看起来很正常了,是么?何况,你其实也用不着它,有this你这些要求就都可以办到了。

3。super的另外一个作用是调用父类的protected函数。只有通过"super"这个 魔咒,我们才能操作父类的protected成员,别无它法。
### Java 中 `super` 关键字的使用方法 #### 访问父类构造方法 在Java中,如果子类需要调用父类的构造函数,则可以通过`super()`实现这一操作。此方式允许子类初始化过程中利用父类已有的资源完成自身的构建工作[^1]。 ```java class Animal { String name; // 构造器 public Animal(String name) { this.name = name; } } class Dog extends Animal { // 子类构造器, 调用了父类带参构造器 public Dog(String name){ super(name); // 显式调用父类构造器 } } ``` #### 调用被重写的方法 当存在同名方法存在于父子类之间时(即发生覆盖),可以在子类内部借助`super.methodName()`的形式显式指定执行来自父类版本的方法逻辑[^2]。 ```java // 定义Person类及其message方法 class Person { void message(){ System.out.println("This is person class"); } } // 继承自Person的Student类重新定义了message方法,并新增display方法展示不同行为 class Student extends Person{ @Override void message(){ System.out.println("This is student class"); } void display(){ message(); // 执行当前类(子类)的message() super.message();// 明确指向父类(Person)中的message() } } ``` 上述例子展示了如何在一个名为`display`的新方法里先后打印出自定义的消息以及原始未修改过的消息内容。 #### 注意事项 需要注意的是,由于构造函数不是普通意义上的成员函数,因此它们不会自动地由派生类继承下来;也就是说,即使基类提供了多个不同的构造签名形式供选择,这些都不会成为衍生出来的任何新类型的默认组成部分。为了确保必要的初始化动作被执行,通常会在子类自己的构造体的第一条语句处放置对`super(...)`这样的调用来达到目的[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值