なぜ私は、オブジェクトをキャストすることができますか?それは、他のオブジェクトで行うことができますか?

ErlichBachman:

私が書いていたので、paintComponent(Graphics g)この方法を、私は、私はそれをキャストしていますことを最初に実現しましたGraphics2D g2 = (Graphics2D) g;私はしばらく前にこのコードを書いただけで、私はこれが何であるか見当もつかない実現します。私は少しグーグルが、オブジェクトのキャストは、私には少し外国人です。

一つのオブジェクト参照は、別のオブジェクト参照に型キャストすることができます。これは、オブジェクトをキャストと呼ばれています。

^^ Y.ダニエル・梁によって私の教科書からの言葉のWord

この作品、なぜ私は理解していません。GraphicsそしてGraphics2D2つの異なるオブジェクトがどのように彼らはそれぞれ、他のインスタンス変数やメソッドを継承することができていますか?もちろん、私は拡大し、狭くすなわち原始鋳造の承知しています。彼らはバイトなど整数、ダブル、の単なるラッパークラスであるので、これは理にかなって...

dfritsi:

いかなる種類のオブジェクト変換または変換をキャストしないで何が起こっています。ちょうどあなたが以下のクラス構造を持っていると想像:

class Mammal { }
class Human extends Mammal { }
class Dog extends Mammal { }

あなたが人間の新しいインスタンスを作成するときに今Human human = new Human();それも、右の哺乳類のだろうか?だから、あなたのようなメソッドを記述することができます。

public void doSoemthing(Mammal mammal) {
    if (mammal instanceof Human) {
        Human human = (Human) mammal;
        human.doWork();
    } else if (mammal instanceof Dog) {
        Dog dog = (Dog) mammal;
        dog.bark();
    }
}

そして、のようなメソッドを呼び出します。

doSomething(new Human());

あなたの方法は、入力パラメータとして、あなたの方法において、哺乳動物の任意の型を取ることができますので、種類哺乳類のそれは本当に何で確認することができます。あなたが渡すときにnew Human()、入力として、オブジェクトの実際の型は人間になります。あなたは哺乳動物を期待してメソッドに人間を渡すことができるので、理由が継承ためです。それでは、あなたの方法を知っていることは、入力パラメータは間違いなく哺乳動物であるということです。しかし、それは、哺乳動物のあらゆる種類のことができます。あなたがオブジェクトの実際の型が何であるかを知りたい場合は、使用することができinstanceof、たとえば。そして、この行で:

Human human = (Human) mammal;

あなたは、哺乳類の入力パラメータを変換しているわけではありません。それはちょうど今からあなたに人間としての入力パラメータを使用することを意味します。isntanceofあなたはそれが本当に人間だということを確認するため、そして、あなたは、それを行うことができます。また、このような何かを行うことができます:

public void doExample2(Object input) {
    if (input instanceof Integer) {
        System.out.println("I am a number");
    } else if (input instanceof Graphics) {
        System.out.println("I am a Graphics");
    }
}

tehの入力パラメータの種類に注意してください。オブジェクトは、すべての基本クラスです。

だからあなたのシナリオに背中を取得。アプリケーションのコンテキストからの入力パラメータは常にのGraphics2Dになりますので、あなたは、その鋳造を行い、そしてあなたがその鋳造を行うことができ、また、Graphics2Dのが提供するメソッドを使用する理由です。

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=478557&siteId=1