オブジェクト指向言語の比較の記事では、C++・Java・C#・Visual Basic(.NET)・Delphi言語・JavaScriptの各言語について、オブジェクト指向プログラミングに関係することや全く関係しないことについて、「キーワード比較表」として(「キーワード」については、「予約語」の記事を参照)比較する。

## キーワード比較表

|  | C++ | Java | C# | Visual Basic(.NET) | Delphi言語 | JavaScript |
| --- | --- | --- | --- | --- | --- | --- |
| クラスの宣言 | class、struct | class | class | Class | class | prototype |
| あらゆるスコープからの参照許可 | public | public | public | Public | public,published | N/A |
| 同一パッケージ (アセンブリ) 内部からの参照許可 | N/A | (無指定がデフォルト) | internal | Friend | (同一ユニット内に記述) | N/A |
| クラス外部からの参照不許可 | private | private | private | Private | private | N/A |
| サブクラス以外からの参照不許可 | protected | protected | protected | Protected | protected | N/A |
| 継承関係の無いクラスのプライベートメンバ参照許可 | friend | N/A | プライベートアクセサか、リフレクションを使用 | プライベートアクセサか、リフレクションを使用 | (同一ユニット内に記述) | N/A |
| クラスの各インスタンスで共有されるメンバ | static | static | static | Shared | class | N/A |
| 新規オブジェクトの作成 | new | new | new | New、CreateObject() | class.create | new |
| 値を返さない関数(メソッド) | void 関数名(){} | void メソッド名(){} | void メソッド名(){} | Sub プロシージャ名() | procedure | N/A |
| 関数(メソッド)のオーバーロード(多重定義) | N/A(デフォルト) | N/A(デフォルト) | N/A(デフォルト) | Overloads | overload | N/A(デフォルト) |
| 自分自身のオブジェクトへの参照 | this | this | this | Me | self | this |
| コンストラクタの宣言 | クラス名(){} | クラス名(){} | クラス名(){} | Sub New() End Sub | constructor | function プロトタイプ名(){} |
| オブジェクト破棄時処理の宣言 | ~クラス名() {} | finalize() {} | Dispose(){}, ~クラス名() {} | Sub Dispose() End Sub, Sub Finalize() End Sub | destructor | N/A |
| スーパークラスの参照 | スーパークラス名 | super | base | MyBase | inherited | N/A |
| インタフェースの宣言 | N/A | interface | interface | Interface | interface | N/A |
| 実装されるインタフェースの指定 | N/A | implements | : | Implements | . | N/A |
| 抽象クラスの宣言 | N/A | abstract | abstract | MustInherit | abstract | N/A |
| 継承不可クラスの宣言 | N/A | final | sealed | NotInheritable | sealed | N/A |
| スーパークラスからのクラスの派生 | : | extends | : | Inherits | =class(superclass) | N/A |
| メソッドのオーバーライド | N/A | `@Override`(任意, Java SE 5から) | override | Overrides | override | N/A |
| サブクラスにて実装を強制する関数(メソッド)の宣言 | = 0 | abstract | abstract | MustOverride | abstract | N/A |
| オーバーライド不可関数(メソッド)の宣言 | N/A(デフォルト) | final | sealed | NotOverridable | final |
| オーバーライド可能関数(メソッド)の宣言 | virtual | N/A(デフォルト) | virtual | Overridable | virtual,dynamic |
| サブクラスにおけるスーパークラスのメンバの隠蔽 | N/A | N/A(デフォルト) | new | Shadows | N/A | N/A |
| クラスメソッドへの型安全な参照の宣言 | N/A | N/A | delegate | Delegate | N/A | N/A |
| 列挙型の宣言 | enum | enum (Java SE 5から, `java.lang.Enum`のサブクラス扱い) | enum | Enum、End Enum | typename=(enm1,enm2,...) | N/A |
| アノテーション・属性の宣言 | N/A | @interface アノテーション名 (`java.lang.Annotation`のサブインタフェース扱い) | class 属性名 : Attribute | <AttributeUsage(AttributeTargets.All)>Class 属性名:Inherits Attribute、End Class | N/A | N/A |
|
| アノテーション・属性の使用 | N/A | @アノテーション名(変数名1=値1,変数名2=値2...) | [属性名1(変数名1=値1,変数名2=値2...),属性名2(...)...] | <属性名1(引数1,引数2,...,変数名1:=値1,変数名2:=値2...),属性名2(...)...> | N/A | N/A |
| ジェネリック型・テンプレート | 型名<パラメータ1,パラメータ2...> | クラス名<パラメータ1,パラメータ2...> | 型名<パラメータ1,パラメータ2...> | 型名(Of パラメータ1,パラメータ2...) | N/A | N/A |
| ジェネリック型パラメータ制約 | N/A | クラス名< パラメータ1 extends パラメータ1のスーパークラス叉はスーパーインタフェース, パラメータ2...> 叉は クラス名< パラメータ1 super パラメータ1のサブクラスまたはサブインタフェース, パラメータ2...> | where パラメータ1 : パラメータ1のスーパークラス, パラメータ1のスーパーインタフェース where パラメータ2... | (Of T As {New,Class,Structure,インターフェイス名,クラス名}, U As {・・・}) | N/A | N/A |
| ジェネリック型パラメータのワイルドカード指定 | N/A | クラス名<?, ?, ?, ...> | N/A | N/A | N/A | N/A |