哪个类在继承方法中“超级”引用?

时间:2014-08-26 12:45:26

标签: java inheritance method-call

我在这里问这个问题因为我真的不知道我应该怎么做这个。我需要确认一些我今天可能想到的东西。前几天我认为如果一个对象继承了它父亲的方法,那就意味着它基本上就是#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()仍然指的是其原始"的超类。类。

这种洞察力是否正确?

2 个答案:

答案 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();
  }

当然,你不能在同一个类中实现它们,因为它们具有相同的签名。