我在这里问这个问题因为我真的不知道我应该怎么做这个。我需要确认一些我今天可能想到的东西。前几天我认为如果一个对象继承了它父亲的方法,那就意味着它基本上就是#34;有#34;其代码中的方法。但后来我问如果我们这样做:
class B extends A {
public B() {
}
public int getValue() {
return 2 * super.getValue();
}
}
class C extends B {
public C() {
}
public int getValue(int b) {
return 5 * b;
}
}
并且假设有一个A类也有getValue()
方法。现在,C类的一个对象使用"它的"它继承自B的getValue()
方法(没有参数)
但是super.getValue()
仍然引用了A类,即使调用它的方法是继承的。
继承并不意味着C类和#34;在其代码中的方法,但它可以从B使用它,对吗? super()
仍然指的是其原始"的超类。类。
这种洞察力是否正确?
答案 0 :(得分:2)
继承并不意味着C类和#34;它的代码中的方法,但它可以从B使用它,对吗?
是
super()仍指其"原始"的超类。类。
是。你是对的。 super
始终引用其使用位置的Parent类。在这种情况下,它在B中使用,它的父亲是A.所以指的是那里。
答案 1 :(得分:0)
子类可以覆盖其超类的任何非私有方法。如果它没有覆盖它们,它会从超类继承这些方法的实现。
因此,您可以说子类“有”访问其所有祖先的所有非私有方法。从对子类实例的引用中,您可以调用子类的任何可访问(基于访问修饰符)方法或子类的任何祖先。
super
关键字允许您从子类调用超类的方法实现。这样你就可以覆盖超类方法的实现,但是仍然执行超类的实现。
在你的班级B:
此实现会覆盖A:
的getValue()
public int getValue() {
return 5;
}
虽然此实现会覆盖A的getValue()
,但仍使用其逻辑:
public int getValue() {
return 2 * super.getValue();
}
当然,你不能在同一个类中实现它们,因为它们具有相同的签名。