ネタ心者歓迎!今更ながらにJava相談室 その2
■ このスレッドは過去ログ倉庫に格納されています
0420デフォルトの名無しさん
NGNGクラス BaseX と RunnerX を以下のように定義しました。
public BaseX { /* からっぽ */ }
public class RunnerX
extends BaseX
implements Runnable
{
public void run() { /* 実装は省略 */ }
}
で、RunnerXのオブジェクト x を作ります。
RunnerX rx = new RunnerX();
rxをBaseXまたはRunnable変数に代入する以下の式はもちろん
コンパイルできて実行時も例外を発生しません。
BaseX bx = rx;
Ruunable r = rx;
しかしこのように代入されたRunnable型変数 rを
BaseX型変数に代入しようとするとコンパイルエラー
になります。(互換性のない型 と怒られる)
BaseX bx2 = r; // コンパイルエラー!!
これは納得です。
が、疑問に思っているのは、Runnable型のrをObject型変数
に代入する式、
Object obj = r;
がコンパイルOKってことです。
「Objectはすべてのクラスのツリーのルートだが、インタフェース
には共通のルートはない」という原則にそぐわない気がするのです。
なんかすっきりした説明のできる方いませんか?
■ このスレッドは過去ログ倉庫に格納されています