Java关键字 `super` 的骚操作

您所在的位置:网站首页 java调用父类方法的关键字 Java关键字 `super` 的骚操作

Java关键字 `super` 的骚操作

2024-04-24 18:12| 来源: 网络整理| 查看: 265

文章目录

1. 调用父类构造方法2. 访问父类属性和方法3. 创建父类引用4. 在接口中使用 super5. 在 Lambda 表达式中使用 super6. 异常处理结语

🎉欢迎来到Java学习路线专栏~Java关键字 super 的骚操作

☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹✨博客主页:IT·陈寒的博客🎈该系列文章专栏:Java学习路线📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏📜 欢迎大家关注! ❤️

Java 是一门广泛使用的面向对象编程语言,拥有丰富的特性和关键字来支持各种编程场景。其中,super 是一个关键字,用于在子类中引用父类的成员。虽然 super 的主要目的是调用父类的方法和属性,但它也有一些不太为人所知的骚操作,本文将介绍这些特殊用法。

在这里插入图片描述在这里插入图片描述1. 调用父类构造方法

super 最常见的用途是在子类构造方法中调用父类的构造方法。这通常发生在子类需要执行某些父类初始化操作时。以下是一个示例:

代码语言:javascript复制class Parent { Parent() { System.out.println("父类构造方法"); } } class Child extends Parent { Child() { super(); // 调用父类构造方法 System.out.println("子类构造方法"); } }

这里,super() 调用了父类 Parent 的构造方法,确保在创建 Child 对象时会执行父类的初始化。

2. 访问父类属性和方法

super 还可以用于访问父类的属性和方法,即使在子类中存在相同名称的属性或方法。这种情况下,super 用于明确指示你要访问父类的成员。示例如下:

代码语言:javascript复制class Parent { String name = "父类属性"; void printInfo() { System.out.println("这是父类方法"); } } class Child extends Parent { String name = "子类属性"; void printInfo() { super.printInfo(); // 调用父类方法 System.out.println("这是子类方法"); } void accessParentAttribute() { System.out.println(super.name); // 访问父类属性 } }

在 Child 类的 printInfo 方法中,使用 super.printInfo() 明确调用了父类的 printInfo 方法。同样,super.name 用于访问父类的 name 属性。

3. 创建父类引用

super 还可以用于创建父类的引用,这对于多态和方法重写非常有用。例如:

代码语言:javascript复制class Animal { void makeSound() { System.out.println("动物发出声音"); } } class Dog extends Animal { void makeSound() { System.out.println("狗叫"); } } public class Main { public static void main(String[] args) { Animal myDog = new Dog(); // 使用父类引用指向子类对象 myDog.makeSound(); // 调用的是子类的方法 } }

在这个示例中,myDog 是一个 Animal 类型的引用,但它指向一个 Dog 类的对象。通过这种方式,可以实现多态,调用适当的子类方法。

4. 在接口中使用 super

super 也可以在接口中使用,用于解决多重继承冲突。如果一个类实现了多个接口,而这些接口有相同方法签名的默认方法,编译器将不知道要调用哪个接口的方法。在这种情况下,super 可以用于明确指示要调用哪个接口的方法。以下是一个示例:

代码语言:javascript复制interface Animal { default void makeSound() { System.out.println("动物发出声音"); } } interface Vehicle { default void makeSound() { System.out.println("车辆发出声音"); } } class Car implements Animal, Vehicle { @Override public void makeSound() { Vehicle.super.makeSound(); // 明确指定使用 Vehicle 接口的方法 } }

在 Car 类的 makeSound 方法中,使用 Vehicle.super.makeSound() 明确指示调用 Vehicle 接口的 makeSound 方法。

5. 在 Lambda 表达式中使用 super

Lambda 表达式通常用于实现函数式接口。在 Lambda 表达式中,super 关键字可以用于引用父类的成员或调用父类的方法。以下是一个示例:

代码语言:javascript复制@FunctionalInterface interface MyFunction { void myMethod(); } class Parent { void sayHello() { System.out.println("Hello from parent"); } } class Child extends Parent { void greet() { MyFunction func = () -> { super.sayHello(); // 在 Lambda 中使用 super 调用父类方法 System.out.println("Hello from child"); }; func.myMethod(); } }

在 Child 类的 greet 方法中,Lambda 表达式 func 使用 super.sayHello() 调用了父类的 sayHello 方法。

6. 异常处理

在异常处理中,super 关键字可以用于调用父类的异常处理代码。这在子类覆盖父类方法时非常有用。以下是一个示例:

代码语言:javascript复制class Parent { void performAction() throws MyException { // 一些可能抛出异常的代码 } } class Child extends Parent { void performAction() throws MyException { try { super.performAction(); // 调用父类的异常处理代码 } catch (MyException e) { // 处理子类特定的异常情况 } } }

在 Child 类的 performAction 方法中,使用 super.performAction() 调用了父类的异常处理代码,然后在 catch 块中处理子类特定的异常情况。

在这里插入图片描述在这里插入图片描述结语

Java 中的 super 关键字不仅用于调用父类的构造方法,还可以用于访问父类的属性和方法,创建父类引用,解决多重继承冲突,Lambda 表达式中使用以及异常处理。这些用法使得 super 成为 Java 面向对象编程中非常有用的工具之一。通过灵活运用 super,你可以更好地掌控和组织你的代码。希望本文对你加深对 Java 中 super 关键字的理解有所帮助。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3