A
、B
、C
の3つのクラスがあり、それぞれが前のクラスを拡張していると仮定します。
B
がmyMethod
も実装している場合、A.myMethod()
からC.myMethod()
のコードを呼び出すにはどうすればよいですか?
class A
{
public void myMethod()
{
// some stuff for A
}
}
class B extends A
{
public void myMethod()
{
// some stuff for B
//and than calling A stuff
super.myMethod();
}
}
class C extends B
{
public void myMethod()
{
// some stuff for C
// i don't need stuff from b, but i need call stuff from A
// something like: super.super.myMethod(); ?? how to call A.myMethod(); ??
}
}
できません。これは意図的なものです。
クラスB
は、サブクラスへのインターフェース(概念のように、Javaキーワードではない)を提供します。A.myMethod
の機能に直接アクセスしないことを選択しました。 。その機能を提供するためにB
が必要な場合は、別の方法を使用します(別の名前、protected
にします)。ただし、「継承よりも構成を優先する」方がおそらく良いでしょう。
あなたはできません、そしてあなたはすべきではありません。
これは悪いデザインの兆候です。メソッドの名前を変更するか、必要な共通機能を別のメソッドまたはユーティリティクラスに含めます。
できるかわかりません。 Javaは、デフォルトですべてのメソッドを仮想化します。これは、最も単純なソリューションが機能しないことを意味します。タイプA
の変数を宣言し、C
インスタンスをに割り当てます。それを呼び出してmyMethod
を呼び出すと、C.myMethod
が呼び出されます。
型A
を反映して、そのメソッドを直接呼び出すことができます。この場合に何が起こるかを見るのは興味深いですが、仮想ディスパッチが起こらないとしたら驚きます...