问超级超级

时间:2013-08-29 08:51:14

标签: java extends super

我怀疑我想做什么是可能的。我有三个类A,B y C. B扩展A和C扩展B。

C - > B - >甲

在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 **
}

5 个答案:

答案 0 :(得分:4)

Jon Skeet从here获取最合适的答案

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

你可以调用你的超类的方法,因为它假设你知道什么打破了你自己的类中的封装,并避免...但你不知道你的超类强制执行什么规则 - 所以你不能只是绕过那里的实施。

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

B级

method(){
super.method()
}

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

答案 3 :(得分: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();
  }
}

答案 4 :(得分:-2)

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

您可以设计一个class B函数,以便super调用class A。现在,您可以使用class C来获得所需的结果。