それを理解することは今非常に重要であり、私はどこにも情報を見つけることができないようであり、その上に括弧を付けてグーグルすることは一種の不可能です.
コードには printInfo メソッドと Wrench クラスがありますが、「 ((Class)object).method(); 」とは何ですか?
Maciej の答えを拡張するには... Java では、アクセスできるメソッドとフィールドのセットは、変数が宣言されている型に依存します。特定の時点で実際に参照しているオブジェクトの型ではありません (その宣言された型のサブクラス)。サブクラスのメンバーにアクセスするには、取得したいメンバーのサブクラスを Java に伝える必要があります。それを行う方法は、キャスト演算子を使用することです: (Class)object
.
これは「ダウンキャスト」と呼ばれ、スーパークラスの型からサブクラスの型に移行することを意味します。ClassCastException
オブジェクトが実際には正しいタイプでない場合、ダウンキャストは をスローします。
したがって、上記の Maciej の例でa
は、 type として宣言された参照A
です。現在の値は type のオブジェクトですが、B
at のメンバーを取得するには、 type の参照B
から type の参照にダウンキャストする必要があります。A
B
余分な括弧について: 演算子の優先順位のため、そのままでは実行できません(Class)object.foo()
– Java はそれを として解釈し(Class)(object.foo())
ます。したがって、通常は括弧を追加して、呼び出しを試行する前foo()
にキャストが確実に行われるようにします。
そのキャスティングと呼ばれる
これを見てください
public class A {
//statements
}
public class B extends A {
public void foo() { }
}
A a=new B();
//To execute **foo()** method.
((B)a).foo();