0

派生クラスの外でJavaのスーパークラスメソッドに明示的にアクセスできるかどうか疑問に思っています。次の C++ コードは、これを示しています。

#include <iostream>
using namespace std;

class A {
  public:
    virtual void f( ) {
      cout << "A\n";
    }
};

class B : public A {
  public:
    void f( ) {
      cout << "B\n";
    }
};

int main( ) {
  B b;
  b.A::f( );
  return 0;
}

このコードは、f の A バージョンを明示的に呼び出すため、"A" を出力します。

これは恐ろしい設計であり、カプセル化が完全に壊れていることは知っていますが、これはJavaで可能ですか?

4

2 に答える 2

1

いいえ、それを直接行う方法はありませんが、b 内に関数を記述して a の f() を呼び出すことができます。

class a {
    public void f() {
        System.out.println("hi");
    }
}

class b extends a {
    public void f() {
        System.out.println("hi2");
    }

    public void f2() {
        super.f();
    }
}

ただし、f()fromの a にはアクセスできないことに注意してください。つまり、b 内からスーパークラス a を呼び出します。bf2()super.f()

superはスーパークラスの呼び出しであり、外部から呼び出すことはできませんが、内部で呼び出せるようにクラスを設計できます。

于 2013-04-11T23:57:44.350 に答える
0

これはJavaではできません。C++ でこれを行うと、自分が何をしているのかわかっているので問題ありません。Java では、リフレクション API を介してプライベート メソッドやフィールドへのアクセスが実際に許可されています。

于 2013-04-12T00:09:05.743 に答える