关于java:问超级超级

Asking super of super

本问题已经有最佳答案,请猛点这里访问。

我对我想做的事情是否可能有疑问。我有三个类A,B,Y,C。B扩展A和C扩展B。

C->B->A。

在C类中,我想直接调用类的方法。有点像

1
super.super.method();

我有机会吗?

原因:

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

现在我有了一个方法,我不能仅仅解决修改参数的问题,所以我想完全重写它。

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

我想用C语言做什么

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


乔恩·斯基特从这里找到了最合适的答案

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

您可以调用超类的方法,因为它假定您知道什么会破坏您自己类中的封装,并避免这样做…但是你不知道你的超类正在执行什么规则——所以你不能只是绕过那里的一个实现。


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

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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();
  }
}


我认为那是不可能的。也许你可以用这种方法来实现。

B类

1
2
3
method(){
super.method()
}

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


super可用于调用直接父类。

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