gpt4 book ai didi

java - 如何调用被重写方法的 super 版本?

转载 作者:行者123 更新时间:2023-12-02 05:39:33 25 4
gpt4 key购买 nike

我知道如何通过 super. 从子类调用父类(super class)中的方法,即使该方法被重写也是如此。但是如何调用父类(super class)中的方法呢?

这不可能吗?

public class Test extends Super{

public static void main (String[] args){
Test t = new Test();
t.print();
}

void print1(){
System.out.println("Hello");
}
}


class Super{

void print1(){
System.out.println("hi");
}

void print(){
print1();
// What can I do when I want to print "hi"
}
}

最佳答案

一旦你override一个函数,该函数的 super 版本不再可以访问,无论是父类(super class)还是子类。这就是所谓的“隐藏”。唯一的异常(exception)是通过 super 从重写的函数中调用它:

public class Test extends Super{
void print1(){
System.out.println("Hello");
super.print1(); //Here
}
}
class Super{
void print1(){
System.out.println("hi");
}
}

(这正是 constructors must never directly call functions that are potentially overridable 的原因。)您还可以将 Super.print1() 设为私有(private),这意味着即使存在 Test.print1(),它也不会覆盖任何内容,因为,就其而言, super 版本不存在(不可见)。

所以这个:

public class Test extends Super{
public static void main (String[] args){
Test t = new Test();
t.print();
}
void print1(){
System.out.println("Hello");
}
}
class Super{
private void print1(){
System.out.println("hi");
}
void print(){
print1();
this.print1();
}
}

输出:

hi
hi

关于java - 如何调用被重写方法的 super 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24628276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com