Java “哪一类是”的意思;超级";在继承的方法中引用?
我在这里问这个问题,因为我真的不知道我应该如何谷歌这个。我需要确认我今天可能发现的东西。几天前,我认为如果一个对象继承了其父对象的方法,这意味着它在代码中基本上“拥有”了该方法。但后来我问如果我们这样做会怎么样:Java “哪一类是”的意思;超级";在继承的方法中引用?,java,inheritance,method-call,Java,Inheritance,Method Call,我在这里问这个问题,因为我真的不知道我应该如何谷歌这个。我需要确认我今天可能发现的东西。几天前,我认为如果一个对象继承了其父对象的方法,这意味着它在代码中基本上“拥有”了该方法。但后来我问如果我们这样做会怎么样: class B extends A { public B() { } public int getValue() { return 2 * super.getValue(); } } class C extends B { public C()
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继承的“its”getValue()
方法(不带参数)
但是super.getValue()
仍然引用类A,即使调用它的方法是继承的
继承并不意味着类C在其代码中“拥有”该方法,但它可以从B使用它,对吗super()
仍然引用其“原始”类的超类
这种见解正确吗?子类可以重写其超类的任何非私有方法。如果不重写它们,它将从其超类继承这些方法的实现 因此,可以说子类“拥有”访问其所有祖先的所有非私有方法的权限。通过对子类实例的引用,您可以调用子类或子类的任何祖先的任何可访问(基于访问修饰符)方法
super
关键字允许您从子类调用超类的方法实现。通过这种方式,您可以覆盖超类方法的实现,但仍然可以执行超类的实现
在你的B班:
此实现将覆盖以下对象的getValue()
:
public int getValue() {
return 5;
}
虽然此实现覆盖了的getValue()
,但仍使用其逻辑:
public int getValue() {
return 2 * super.getValue();
}
当然,不能在同一个类中实现这两个函数,因为它们具有相同的签名
继承并不意味着类C在其代码中“拥有”该方法,但它可以从B使用它,对吗
对
super()仍然引用其“原始”类的超类
对。你说得对
super
始终指使用它的父类。在本例中,它在B中使用,其父级是A。因此,请参考此处。最好的方法是始终测试自己:-)@Leo OP发现了这一点。要求澄清:)如果您包含了a
的定义,并且没有费心包含C.getValue(int b)
,那么您的代码示例会更容易理解,因为它是不相关的。问题中的主要困惑似乎是在这个上下文中使用了super
。我认为这个答案忽略了这一点。我不同意你的“不”答案。C继承A和B的所有非私有方法,不管它是否重写其中任何一个,因此在这个意义上它“拥有”它们。@Eran,但它可以从B使用它。我的错。读两遍就明白了。谢谢你的更正。但是如果我有一个C对象,而C继承了这个方法并使用了这个方法,那么这意味着这个方法在B中引用了它自己,但这里不是这样。即使C继承了该方法,super仍然引用A方法。对吗?@DennisvonEich Child可以从父级(继承)访问该方法,但这并不意味着它拥有该方法。父级仍然只包含该方法。您只是从孩子的位置执行它。希望这是清楚的ᴜʀᴇsʜᴀᴛᴛᴀ 这正是我想知道的。这是一个我以前不知道的重要事实。非常感谢。