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ʜᴀᴛᴛᴀ 这正是我想知道的。这是一个我以前不知道的重要事实。非常感谢。