2016-10-28 9 views
1

私はこのJavaコードで混乱しています。これはオブジェクト指向のプログラミングスキルが不足している可能性が高いためです。コードの説明:DataModelモデル=新しいFileDataModel(新しいファイル( "intro.csv"));

DataModel model = new FileDataModel (new File("intro.csv")); 

どのようにDataModelがFileDataModelに関連していますか。これは「isa」関係ですか? FileDataModelはDataModelです。その場合、一般に親クラスは任意のサブクラスと同じになりますか?また、オブジェクトは、親/サブクラスに関して全く関係がない別のクラスと同等である可能性がありますか?

+0

あなたは私の説明を理解してなかったClassCastExceptionます私は、コンパイラのエラーを取得し、私はhoeverうではないだろうか? – ItamarG3

答えて

3

あなたの最初の質問では、はい。

FileDataModelDataModelあるので、1本がアップキャストと呼ばれて... DataModel参照にFileDataModelオブジェクトを与え、OOPのコア原則であることができます。

あなたの2番目の質問については、いいえ。アップキャストは、参照が作成されたオブジェクトの親である場合にのみ機能します。例で

Number n = new Integer(1);// Integer is of type Number 
String s = new Integer(5);// Integer is unrelated to String 

、Iは整数nを作成するが、基準は、タイプNumberです。それはInteger(子の)Numberを拡張するために機能します。ただし、2行目はコンパイルされません。これは、StringIntegerが互いに関連していない(どちらも他の親ではない)ためです。

+0

2番目の例を挙げることはできますか? – user

+1

はい。ちょっとだけ – ItamarG3

+0

@userあなたが答えが良いと思うなら、それをアップヴォートして受け入れられるとマークすることができます。 – ItamarG3

1

は、追加情報のabscenceに基づいて推測する必要がなく、ウィル:

FileDataModelが拡張または実装することになりますDataModel(私はそれを拡張することを推測すると思います)のでDataModelモデルであり、現実には、FileDataModelFileDataModelがすべてDataModel(これはOOPと拡張/継承の基本的な恩恵です)であるため、DataModelオブジェクト参照に割り当てることができます。

明示的にするDataModelにFileDataModelをキャストしない限り、あなたはFileDataModelのにキャストすることができなかったと仮定すると、ランタイムエラーで終わる可能性があり、その場合にはFileDataModelは、コンパイラはあなたにこのことを伝えるエラーうDataModelを延長しなかった場合データモデル。

私は割り当てようとすると、だから、例えば:

String s = new Integer(5); 

を私は整数の文字列ではなく、それに割り当てることができないことを警告し、コンパイル時間を取得します。

私はしかし、これを行う場合は、次の

String s = (String)new Integer(5); 

関連する問題