1

自分のやりたいことが実現できるのか疑問です。私は3つのクラスA、B y Cを持っています.BはAを拡張し、CはBを拡張します.

C -> B -> A.

Cクラスで、Aクラスのメソッドを直接呼び出したい。何かのようなもの

super.super.method();

私はそれをするチャンスがありますか?

理由:

A と B はシステム クラスです。B にいくつかの状況を別の方法で処理させようとしていますが、1 つの方法を除いてそれを達成しました。他のメソッドでは、それらをオーバーライドして変更した引数を渡しました。

引数を変更するだけでは解決できないメソッドがあるので、完全にオーバーライドしたいと思います。

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

ジョン・スキートがここから最も適切な答えを拾いました

できません-カプセル化が壊れるからです。

自分のクラスのカプセル化を壊すものを知っていると想定されているため、スーパークラスのメソッドを呼び出すことができ、それを回避できます...しかし、スーパークラスが適用しているルールがわからないため、単にバイパスすることはできませんそこで実装。

于 2013-08-29T08:55:45.733 に答える
2

それはいけません。 super直接のスーパークラスにのみアクセスできます。

それを行う必要があると思われる場合は、おそらく設計上の問題があります。やりたいことの詳細を教えてください。

于 2013-08-29T08:53:56.023 に答える
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 に答える
0

それは不可能だと思います。この方法で実装できるかもしれません。

クラスB

method(){
super.method()
}

次に、クラス C で super.method() を呼び出すことができます。そうすれば、最終的に A のメソッドを呼び出すことができます。

于 2013-08-29T08:56:04.293 に答える
-2

super直接の親クラスを呼び出すために使用できます。

class Bスーパーが を呼び出すような関数を設計できるかもしれませんclass Aclass Cこれで、目的の結果を得るために使用できます。

于 2013-08-29T08:55:55.460 に答える