java中子类如何调用父类方法6

在Java中,子类调用父类方法有多种方式,包括使用 super 关键字、继承直接调用父类方法、重写父类方法等。 其中,使用 super 关键字是最常见的方法。使用 super 关键字,子类可以直接调用父类的构造方法和普通方法。本文将详细介绍这些方法并提供示例代码,以帮助读者更好地理解和应用这些技术。
一、使用 super 关键字调用父类方法
super 关键字是用于访问父类成员的特殊关键字。通过 super,子类不仅可以调用父类的普通方法,还可以调用父类的构造方法。
1. 调用父类的普通方法
当子类和父类有同名方法时,可以通过 super 关键字来明确调用父类的方法。
class Parent {
void display() {
System.out.println("Parent display method");
}
}
class Child extends Parent {
void display() {
super.display(); // 调用父类的方法
System.out.println("Child display method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
2. 调用父类的构造方法
在子类的构造方法中,可以使用 super 调用父类的构造方法。这通常用于初始化父类成员变量。
class Parent {
Parent() {
System.out.println("Parent constructor");
}
}
class Child extends Parent {
Child() {
super(); // 调用父类的构造方法
System.out.println("Child constructor");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
}
}
二、继承直接调用父类方法
在子类中可以直接调用父类的公共方法和受保护的方法,而不需要使用 super 关键字。
1. 直接调用父类的公共方法
当子类继承了父类的公共方法时,可以直接调用这些方法。
class Parent {
public void show() {
System.out.println("Parent show method");
}
}
class Child extends Parent {
public void display() {
show(); // 直接调用父类的公共方法
System.out.println("Child display method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
2. 直接调用父类的受保护方法
受保护的方法在子类中也可以直接调用。
class Parent {
protected void show() {
System.out.println("Parent show method");
}
}
class Child extends Parent {
public void display() {
show(); // 直接调用父类的受保护方法
System.out.println("Child display method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
三、重写父类方法并调用父类方法
在子类中重写父类的方法时,可以在重写的方法中调用父类的方法,以实现增强功能。
1. 重写父类方法
在子类中,可以使用相同的方法名和参数列表来重写父类的方法。
class Parent {
void display() {
System.out.println("Parent display method");
}
}
class Child extends Parent {
@Override
void display() {
System.out.println("Child display method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
2. 在重写的方法中调用父类方法
通过 super 关键字,可以在重写的方法中调用父类的方法。
class Parent {
void display() {
System.out.println("Parent display method");
}
}
class Child extends Parent {
@Override
void display() {
super.display(); // 调用父类的方法
System.out.println("Enhanced child display method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
四、在构造方法中调用父类方法
在子类的构造方法中,也可以调用父类的普通方法。这通常用于在对象初始化时执行父类的一些初始化逻辑。
1. 调用父类的初始化方法
在子类的构造方法中,可以调用父类的普通方法来完成初始化工作。
class Parent {
void init() {
System.out.println("Parent init method");
}
}
class Child extends Parent {
Child() {
init(); // 调用父类的普通方法
System.out.println("Child constructor");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
}
}
2. 调用父类的受保护初始化方法
同样的,受保护的方法也可以在子类的构造方法中调用。
class Parent {
protected void init() {
System.out.println("Parent init method");
}
}
class Child extends Parent {
Child() {
init(); // 调用父类的受保护方法
System.out.println("Child constructor");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
}
}
五、在匿名内部类中调用父类方法
在匿名内部类中,也可以调用父类的方法。这在某些情况下非常有用,比如在GUI编程中。
1. 调用父类的方法
在匿名内部类中,可以通过 ClassName.super 的方式来调用父类的方法。
class Parent {
void display() {
System.out.println("Parent display method");
}
}
class Child extends Parent {
void createAnonymousClass() {
Parent anonymous = new Parent() {
void show() {
Child.super.display(); // 调用父类的方法
System.out.println("Anonymous class method");
}
};
anonymous.show();
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.createAnonymousClass();
}
}
六、在接口默认方法中调用父类方法
在Java 8中,引入了接口默认方法。子类可以重写这些默认方法并调用父类的方法。
1. 接口默认方法
接口中可以定义默认方法,子类可以选择重写这些方法。
interface MyInterface {
default void display() {
System.out.println("Interface default method");
}
}
class Parent {
void display() {
System.out.println("Parent display method");
}
}
class Child extends Parent implements MyInterface {
@Override
public void display() {
super.display(); // 调用父类的方法
System.out.println("Child display method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
2. 重写接口默认方法并调用父类方法
在重写接口的默认方法时,可以通过 super 关键字调用父类的方法。
interface MyInterface {
default void display() {
System.out.println("Interface default method");
}
}
class Parent {
void display() {
System.out.println("Parent display method");
}
}
class Child extends Parent implements MyInterface {
@Override
public void display() {
super.display(); // 调用父类的方法
System.out.println("Enhanced child display method");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.display();
}
}
七、总结
在Java中,子类调用父类方法有多种方式,最常见的是使用 super 关键字。此外,子类可以直接调用父类的公共和受保护方法,也可以在重写的方法中调用父类的方法。在构造方法和匿名内部类中,子类也可以调用父类的方法。通过掌握这些技术,开发者可以更灵活地编写代码,实现复杂的继承关系和方法调用逻辑。
相关问答FAQs:
1. 子类如何调用父类的方法?子类可以通过使用super关键字来调用父类的方法。在子类中,使用super.methodName()的方式来调用父类中的方法。这样可以确保子类在调用父类方法时能够正确地继承和使用父类的功能。
2. 如何在子类中重写父类的方法?在子类中,如果需要对父类的方法进行修改或者扩展,可以使用方法重写。首先,在子类中创建一个与父类中方法名和参数列表完全相同的方法,并使用@Override注解来标识这是一个重写方法。然后,在方法体内部实现子类自己的逻辑。在需要调用父类的方法时,可以使用super关键字来调用父类的方法。
3. 子类如何调用父类的构造方法?子类在实例化时,会先调用父类的构造方法来初始化父类的成员变量。在子类的构造方法中,可以使用super关键字来调用父类的构造方法。通过super关键字调用父类的构造方法时,可以传递参数来初始化父类的成员变量。如果子类没有显式地调用父类的构造方法,那么系统会默认调用父类的无参构造方法。
4. 子类如何访问父类的私有方法?子类无法直接访问父类的私有方法,因为私有方法的访问权限仅限于父类内部。如果子类需要调用父类的私有方法,可以通过在父类中定义一个公共的方法,并在该方法中调用私有方法。然后,子类可以通过调用父类的公共方法来间接地调用父类的私有方法。
5. 子类如何使用父类的静态方法?子类可以直接使用父类的静态方法,不需要创建父类的实例。可以通过父类名.静态方法名()的方式来调用父类的静态方法。子类继承了父类的静态方法,可以直接使用,无需进行任何特殊处理。
6. 子类如何调用父类的protected方法?子类可以直接调用父类的protected方法。protected方法的访问权限被限制在同一个包内或者子类中。在子类中,可以通过直接调用父类的protected方法名来访问和使用该方法。不需要使用任何特殊的关键字或者操作来调用父类的protected方法。
原创文章,作者:Edit1,如若转载,请注明出处:https://docs.pingcode.com/baike/202227