我知道如何通过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"
}
}
答案 0 :(得分:1)
只需提供超类print1()方法隐私可见性。
class Super{
private void print1(){
System.out.println("hi");
}
void print(){
print1();
// What can I do when I want to print "hi"
}
}
答案 1 :(得分:1)
一旦你override一个函数,该函数的超级版本就不再可访问超类或子类了。它被称为隐藏"。唯一的例外是通过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()
设为私有,这意味着,即使有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
答案 2 :(得分:0)
super.method_name();
这就是你如何调用超类的方法。如果你想做些不同的事情,请解释一下。
答案 3 :(得分:0)
当您从超类重写方法时,这意味着您不需要使用超类的实现。所以你不能这样做。你可以阅读更多关于多态性的信息。它可能有所帮助。
答案 4 :(得分:0)
实际上,如果你想从父类调用该方法,你不应该覆盖它。
你确实覆盖它的事实意味着对于每个Test实例,你希望它打印“你好”。
如果要打印“hi”,则必须通过父类的实例调用print方法。
答案 5 :(得分:0)
创建Super的对象并调用print方法
Super s = new Super();
s.print();
输出:
hi
答案 6 :(得分:0)
如果您肯定想从Super.print调用Super.print1(),那么您可以将其设为私有。 Test.print1()将不会覆盖它。
答案 7 :(得分:0)
只需使用您方法中的super.method_name()
即可。