サブタイプ

実はあまりよく読んでませんが……。

ColoredPoint2D extends Point2Dはいいのだけど、Point3D extends Point2Dは気持ち悪いんだけど、何故でしょう。
http://d.hatena.ne.jp/m-hiyama/20060627/1151371730
via http://ishikawa.arielworks.com/memo/2006/07/15/141857

部分範囲型の概念からすると逆だと感じます。
Javaの文法よくわからんのですがこんな感じでしょうか。

abstract class Point3D {
  public abstract int GetX();
  public abstract int GetY();
  public abstract int GetZ();
}
class Point2D extends Point3D {
  private int x, y;
  public int GetX(){ return x; }
  public int GetY(){ return y; }
  public int GetZ(){ return 0; }
}

これなら「二次元座標」は「三次元座標の特殊な場合」というis-aの関係を満たすと同時に、Point2DのインスタンスをPoint3D型の変数に代入できますので、整数→実数は暗黙の変換あり、実数→整数は暗黙の変換なしというPascalとかDとかの規則の延長としても自然と思えます。Javaは知らん。
……古い話題みたいでした。orz