クラスベースのオブジェクト指向言語において、インスタンスがクラスを示すオブジェクトとなるようなクラスをメタクラスと呼ぶ。
つまりクラスのクラスであるが、メタクラス自体も一般のクラスであるかどうかは言語によって異なる。(例えば Smalltalk においてはメタクラスである Metaclass は一般のクラスではなくメタクラスである。一方 Ruby においてはクラスを示すオブジェクトのクラスである Class は一般のクラスと同じクラスである。Java においてはクラスそのものはオブジェクトではないが、リフレクション等でクラスを示すのに使われる java.lang.Class は一般のクラスと同じクラスである)
メタクラスの概念を持つ言語では、クラスそのものを第一級オブジェクトとして扱うことができる。クラス内のメソッド等を取り扱うリフレクションのために有用である。
一方、クラスに複雑な関係構造を提供するメタクラスの概念は、習得が難しい傾向にある。