我读了这个问题,并认为如果有人可以这样写,这个问题就很容易解决(并不是说没有它就不能解决):
@Override
public String toString() {
return super.super.toString();
}
我不确定它在很多情况下是否有用,但我想知道为什么它没有,以及其他语言中是否存在类似的东西。
你们怎么看?
编辑:
澄清一下:是的,我知道,这在Java中是不可能的,我并不真的怀念它。这不是我期望的工作,并惊讶地得到一个编译器错误。我只是有了个想法,喜欢讨论一下。
@Jon Skeet解释得好。
在我看来,如果有人想打电话给管理员。超方法则必须是想要忽略直接父元素的行为,但想要访问大父元素的行为。
这可以通过实例Of来实现。如下代码
public class A {
protected void printClass() {
System.out.println("In A Class");
}
}
public class B extends A {
@Override
protected void printClass() {
if (!(this instanceof C)) {
System.out.println("In B Class");
}
super.printClass();
}
}
public class C extends B {
@Override
protected void printClass() {
System.out.println("In C Class");
super.printClass();
}
}
这是驾驶员课,
public class Driver {
public static void main(String[] args) {
C c = new C();
c.printClass();
}
}
它的输出将是
In C Class
In A Class
在这种情况下,类B printClass行为将被忽略。
我不确定这是一个理想的或好的做法,以达到超级。非常好,但它仍然有效。
关键字super只是在超类中调用方法的一种方法。
在Java教程中:https://docs.oracle.com/javase/tutorial/java/IandI/super.html
如果您的方法覆盖了它的父类的方法之一,您可以通过使用关键字super调用被覆盖的方法。
不要相信这是一个超对象的引用!!不,它只是在超类中调用方法的关键字。
这里有一个例子:
class Animal {
public void doSth() {
System.out.println(this); // It's a Cat! Not an animal!
System.out.println("Animal do sth.");
}
}
class Cat extends Animal {
public void doSth() {
System.out.println(this);
System.out.println("Cat do sth.");
super.doSth();
}
}
当你调用cat.doSth()时,类Animal中的方法doSth()将打印这个,它是一只猫。