[英]How to call super-version of a method that is overridden?
我知道如何从父类的子类中调用父类中的方法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{
void print1(){
System.out.println("hi");
}
void print(){
print1();
// What can I do when I want to print "hi"
}
}
只需为您的超类print1()方法提供私有可见性即可 。
class Super{
private void print1(){
System.out.println("hi");
}
void print(){
print1();
// What can I do when I want to print "hi"
}
}
重写函数后,该函数的超级版本将不再对父类或子类都可用。 称为“隐藏”。 唯一的例外是在覆盖的函数中通过super调用它:
public class Test extends Super{
void print1(){
System.out.println("Hello");
super.print1(); //Here
}
}
class Super{
void print1(){
System.out.println("hi");
}
}
(这正是构造函数绝对不能直接调用可能重写的函数的原因。)您还可以将Super.print1()
私有,这意味着,即使有Test.print1()
,它也不会覆盖任何内容,因为就其而言,超级版本不存在(不可见)。
所以这:
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
super.method_name();
这就是您调用超类的方法的方式。 如果您想做不同的事情,请解释。
当您从超类重写方法时,这意味着您不需要使用超类的实现。 所以你不能那样做。 您可以阅读有关多态的更多信息。 这可能会有所帮助。
实际上,如果您想从父类中调用该方法,则不应覆盖它。
您确实覆盖了它的事实,这意味着对于Test的每个实例,您都希望它打印“ hello”。
如果要打印“ hi”,则必须通过父类的实例调用print方法。
创建Super对象并调用print方法
Super s = new Super();
s.print();
输出:
hi
如果您确实想从Super.print调用Super.print1(),则可以将其设为私有。 然后Test.print1()将不会覆盖它。
只需在您的方法中使用: super.method_name()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.