1

我怀疑我想做的事情是否可行。我有三个类 A,B y C。B 扩展 A,C 扩展 B。

C -> B -> A。

在C类中,我想直接调用A类的方法。就像是

super.super.method();

我有机会吗?

原因:

A 和 B 是系统类。我试图让 B 以不同的方式处理某些情况,除了一种方法外,我已经完成了它。在其他方法中,我所做的是覆盖它们并传递修改过的参数。

现在我有一个方法,我不能仅仅修改参数来解决,所以我想完全覆盖它。

@Override
public void draw(Canvas canvas) {
    super.draw(canvas); // A method
    ** other stuff **
}

我想用 C 做什么

@Override
public void draw(Canvas canvas) {
    super.super.draw(canvas); // A method
    ** new stuff **
}
4

5 回答 5

4

Jon Skeet从这里挑选了最合适的答案

你不能——因为它会破坏封装。

您可以调用超类的方法,因为假设您知道什么会破坏您自己的类中的封装,并避免这种情况......但您不知道您的超类正在执行什么规则 - 所以您不能只是绕过在那里实施。

于 2013-08-29T08:55:45.733 回答
2

你不能。 super只允许您访问直接超类。

如果您认为需要这样做,您可能遇到了设计问题。你能告诉我们更多关于你想做什么的细节吗?

于 2013-08-29T08:53:56.023 回答
0

我不认为这是可能的。也许你可以这样实现。

B类

method(){
super.method()
}

然后在 C 类中你可以调用 super.method()。这样你最终会调用 A 的方法。

于 2013-08-29T08:56:04.293 回答
0
class A
{
  void access()
  {
   //this method is to be accessed
    System.out.println("I can be accessed");
  }
}
class B extends A
{
  //code here
}

class C extends B
{

  public static void main(String[] args)
  {
    C ob = new C();
    ob.call();
  }

 void call()
  {
  super.access();
  }
}
于 2013-08-29T09:21:10.323 回答
-2

super可用于调用您的直接父类。

可能你可以设计一个class B函数,让 super 调用class A. 现在您可以使用class C来达到预期的效果。

于 2013-08-29T08:55:55.460 回答