【问题标题】:How to skip one level in inheritance calling super from grandparent in java?java - 如何在Java中从祖父母调用super的继承中跳过一级?
【发布时间】:2017-03-18 03:57:38
【问题描述】:

我有简单的三个类:

class A {
  public A(int a){ }
}

class B extends A {
  public B(int b){ super(b); }
}

class C extends B {
  public C(int c){ super(c); }
}

因此,类实例化期间的执行顺序是 C->B->A->B->C 并且所有对象都被正确实例化。那么问题来了:

我能否以某种方式为 C 类编写一个构造函数,如下所示:

  public C(int c){
    super.super(c);
  }

这个想法是从 A 类调用构造函数,而不是从直接父 B 调用构造函数。这可能吗?

【问题讨论】:

  • 好吧,这里没有方法被覆盖,所以只需调用A(c)。 (我假设这是一个错字 - 请修复您的代码以实际说明您的问题)。
  • 代码现在甚至无法编译,因为您没有声明构造函数 - 您声明的方法名称与类相同。
  • A 应该是构造函数,我猜。不过,OP 或许应该考虑一下他的架构。
  • 可能重复 questionanother
  • 继承是无条件的,所以如果你实际上并不每次都想要“B”部分,就不要扩展。创建一个直接从 A 扩展的类,如果它应该与未直接继承的其他类有共同之处,则将其放入公共 interface。不能跳过课程不是限制,这是您的设计问题。

标签: java oop inheritance constructor superclass


【解决方案1】:

不,你不能那样做。

所有类都需要构建。你不能绕过B的构造。

可以做的是在B 中编写一个protected 构造函数,它本质上是一个无操作的,然后从C 中的构造函数中调用它。

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2016-07-28
    相关资源
    最近更新 更多