super和this之间的区别.docx
文件大小: 7k
源码售价: 10 个金币 积分规则     积分充值
资源说明:this:当前对象(new的对象|调用成员方法的对象) 1.调用本类中的其他构造器 this(参数列表) 2.区分局部和成员之间的问题 super:指代父类对象 1.调用父类的构造器 super() 如果没有显示定义,调用父类的哪一个构造器,默认首行调用super()父类空构造 因为一般子类构造器的首行会默认调用父类空构造的问题,所以建议模板类都至少存在一个空构造 super()必须在首行调用使用才行 2.区分子父类同名问题 如果当子父类中存在同名成员的时候,子类中使用同名内容默认就近原则指代父类,如果先要使用父类的通过super使用 super指代父类对象 如果不存在同名问题,调用父类中的成员,super.可以省略 在Java编程语言中,`super` 和 `this` 是两个非常重要的关键字,它们分别用于处理对象间的关联和访问。理解这两个关键字的区别对于编写高效的代码至关重要。 `this` 关键字代表当前对象,它指的是创建或正在执行方法的那个对象。这个关键字有以下两个主要用途: 1. **调用本类中的其他构造器**:在类的构造器中,你可以使用 `this(参数列表)` 来调用同一类中具有不同参数的其他构造器。这样可以在多个构造器间共享相同的初始化逻辑,保持代码的简洁性和一致性。 2. **区分局部变量和成员变量**:当类的局部变量与成员变量同名时,`this` 可用来明确引用成员变量。例如,`this.a` 表示当前对象的成员变量 `a`,而不是方法中的局部变量 `a`。 `super` 关键字则用于引用父类的对象。它主要有两个应用场景: 1. **调用父类的构造器**:在子类的构造器中,使用 `super()` 可以调用父类的无参构造器,或者使用 `super(参数列表)` 来调用父类的有参构造器。Java规定,子类构造器的第一行必须是 `super()` 或 `this()`,来确保父类的初始化工作先于子类进行。如果父类没有无参构造器,编译器会报错,因此通常建议父类至少提供一个无参构造器。 2. **解决同名问题**:如果子类和父类中有同名的成员(字段或方法),`super` 可以用来明确调用父类的成员。例如,`super.a` 将访问父类的 `a` 字段,即使子类也有同名的 `a` 字段。如果不存在同名问题,调用父类的成员时,`super.` 前缀通常是可省略的。 在类的实例化过程中,总是先初始化父类,再初始化子类,这就是所谓的"先父类后子类"。此外,类的静态成员和初始化块会在任何实例化之前加载,这就是"先静态后成员"的原则。 `final` 关键字在Java中扮演着重要角色,它有以下三个主要用途: 1. **声明常量**:当变量被 `final` 修饰时,它将变成常量,其值在赋值后不可改变。 2. **防止方法重写**:如果一个方法被 `final` 修饰,那么子类将无法重写该方法。 3. **禁止继承**:将类声明为 `final` 可以阻止其他类继承它,这样的类称为"太监类",它的目的是提供一个不可扩展的最终实现。 在给定的代码示例中,`SuperDemo01` 类有一个静态的 `final` 成员 `z`,它是 `Zi` 类的实例。`Fu` 类有两个构造器,而 `Zi` 类继承了 `Fu` 并覆盖了其中的 `a` 字段。`Zi` 的构造器使用 `super` 调用了父类的构造器,并在 `test` 方法中展示了如何通过 `super` 访问父类的同名成员。 总结来说,`this` 和 `super` 是Java中用于对象引用和继承关系的重要关键字,理解它们的工作原理和用法是编写面向对象程序的基础。`final` 关键字则提供了对常量、方法和类的不可变性保证,有助于提高代码的安全性和稳定性。在实际编程中,合理利用这些关键字可以有效地组织代码,减少错误并提高可读性。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。