0

それを理解することは今非常に重要であり、私はどこにも情報を見つけることができないようであり、その上に括弧を付けてグーグルすることは一種の不可能です.

コードには printInfo メソッドと Wrench クラスがありますが、「 ((Class)object).method(); 」とは何ですか?

4

2 に答える 2

3

Maciej の答えを拡張するには... Java では、アクセスできるメソッドとフィールドのセットは、変数が宣言されている型に依存します。特定の時点で実際に参照しているオブジェクトの型ではありません (その宣言された型のサブクラス)。サブクラスのメンバーにアクセスするには、取得したいメンバーのサブクラスを Java に伝える必要があります。それを行う方法は、キャスト演算子を使用することです: (Class)object.

これは「ダウンキャスト」と呼ばれ、スーパークラスの型からサブクラスの型に移行することを意味します。ClassCastExceptionオブジェクトが実際には正しいタイプでない場合、ダウンキャストは をスローします。

したがって、上記の Maciej の例でaは、 type として宣言された参照Aです。現在の値は type のオブジェクトですが、Bat のメンバーを取得するには、 type の参照Bから type の参照にダウンキャストする必要があります。AB

余分な括弧について: 演算子の優先順位のため、そのままでは実行できません(Class)object.foo()– Java はそれを として解釈し(Class)(object.foo())ます。したがって、通常は括弧を追加して、呼び出しを試行するfoo()にキャストが確実に行われるようにします。

于 2013-08-28T22:44:57.163 に答える
1

そのキャスティングと呼ばれる
これを見てください

public class A {
  //statements
}

public class B extends A {
  public void foo() { }
}

A a=new B();

//To execute **foo()** method.

((B)a).foo();
于 2013-08-28T20:30:56.107 に答える