クラス、インターフェース、型チェックの有無

odz氏のコメントより:

Java の interface を型付けを行うための機能だと見れば、静的な型チェックの有無は重要じゃないでしょうか。静的型付けを行わないなら、Java の interface は marker interface 以外の意味を持ちませんから。

2文目についてですが、そんなことはないと思いますよ。


例えば次の例では、class Aを定義するときに、必ずm1()を実装しなければならないことが強制されます。これは型に関係ないですよね。

interface X {
    public void m1();
}

class A implements X {
    public void m1() {
        System.out.println("foobar");
    }
}

class Aがm1()を実装しているかどうかはコンパイル時にチェックできますが、これは型チェックのない言語でもできるはずです(実際の言語がしてるかどうかはともかく)。

あと、メインストリームのオブジェクト指向言語について言えば、クラスというのは、「オブジェクトの振る舞いを規定するもの」であると同時に、静的型付け言語では「オブジェクトの属性を宣言する型」であったりするので、違うかどうかは視点によるかと。

前に書いた通りですね。型チェックのあるなしで「違う」と見なすのであれば、静的な言語と動的な言語ではそもそも機能の比較ができないでしょう(どうせ全て「違う」と見なされるのだから)。
JavaのクラスとObjective-Cのクラスは当然違うものでしょうし、他にもjava.util.ArrayListとNSArrayも違うものと見なされます。


自分はそうは思いませんが。