RE: 続続クラス

おk把握(`・ω・´)

中身がなんだか分からないクラスと、そうでないクラスの2つが出来る。中身がなんだか分からないクラスはVMで独自の処理をする。VMの仕様には当然書かないといけない。
仕様であるクラスと仕様でないクラス。
こういう違いを型とクラスと考えると良いのでは?
という話。

http://nazakki.blogspot.com/2009/03/blog-post_2724.html

けど、例えば Object#clone() は「なんだかわからないもの」として扱わなければならないけど、オーバーライドすることが前提のメソッドだ。実際に Object クラスは中身がなんだかわからないクラスに分類されるけど、けど事実として Object は継承される。たぶん Object#clone() は下のような形で実装されている。

extern Object cloneImpl(Object obj);
class Object {
    protected Object clone() throws CloneNotSupportedException {
       return cloneImpl(this);
    }
}

たぶん、プログラマが定義したものをクラス、言語仕様で定義されるものを型と呼ぶのは、正確ではないと思う。イメージとしては正しい場面も出てくると思うけど、プログラマが定義したものはクラスであると同時に、新たな型になるのではと考えている。
実際問題としては、実装を隠してインタフェイスのみを外に開放したものは、おおよそ型としての情報と言ってしまってほぼ差し支えないと思う。
……まあ、【型】って何かという定義問題に、再び舞い戻ってくるんだけどさ。