オブジェクト指向言語の比較

オブジェクト指向言語の比較（オブジェクトしこうげんごのひかく）の記事では、C++・Java・C#・Visual Basic(.NET)・Delphi言語・JavaScriptの各言語について、オブジェクト指向プログラミングに関係することや全く関係しないことについて、「キーワード比較表」として（「キーワード」については、「予約語」の記事を参照）比較する。
キーワード比較表
　C++JavaC#Visual Basic(.NET)Delphi言語JavaScript クラスの宣言 class、struct class class Class class prototypeあらゆるスコープからの参照許可publicpublicpublicPublicpublic,publishedN/A同一パッケージ (アセンブリ) 内部からの参照許可N/A(無指定がデフォルト)internalFriend(同一ユニット内に記述)N/Aクラス外部からの参照不許可privateprivateprivatePrivateprivateN/Aサブクラス以外からの参照不許可protectedprotectedprotectedProtectedprotectedN/A継承関係の無いクラスのプライベートメンバ参照許可friendN/Aプライベートアクセサか、リフレクションを使用プライベートアクセサか、リフレクションを使用(同一ユニット内に記述)N/Aクラスの各インスタンスで共有されるメンバstaticstaticstaticSharedclassN/A新規オブジェクトの作成newnewnewNew、CreateObject()class.createnew値を返さない関数(メソッド)void 関数名(){}void メソッド名(){}void メソッド名(){}Sub プロシージャ名()procedureN/A関数(メソッド)のオーバーロード(多重定義)N/A(デフォルト)N/A(デフォルト)N/A(デフォルト)OverloadsoverloadN/A(デフォルト)自分自身のオブジェクトへの参照thisthisthisMeselfthisコンストラクタの宣言クラス名(){}クラス名(){}クラス名(){}Sub New() End Subconstructorfunction プロトタイプ名(){}オブジェクト破棄時処理の宣言~クラス名() {}finalize() {}Dispose(){}, ~クラス名() {}Sub Dispose() End Sub, Sub Finalize() End SubdestructorN/Aスーパークラスの参照スーパークラス名superbaseMyBaseinheritedN/Aインタフェースの宣言N/AinterfaceinterfaceInterfaceinterfaceN/A実装されるインタフェースの指定N/Aimplements:Implements.N/A抽象クラスの宣言N/AabstractabstractMustInheritabstractN/A継承不可クラスの宣言N/AfinalsealedNotInheritablesealedN/Aスーパークラスからのクラスの派生:extends:Inherits=class(superclass)N/AメソッドのオーバーライドN/A(任意, Java SE 5から)overrideOverridesoverrideN/Aサブクラスにて実装を強制する関数(メソッド)の宣言= 0abstractabstractMustOverrideabstractN/Aオーバーライド不可関数(メソッド)の宣言N/A(デフォルト)finalsealedNotOverridablefinalオーバーライド可能関数(メソッド)の宣言virtualN/A(デフォルト)virtualOverridablevirtual,dynamicサブクラスにおけるスーパークラスのメンバの隠蔽N/AN/A(デフォルト)newShadowsN/AN/Aクラスメソッドへの型安全な参照の宣言N/AN/AdelegateDelegateN/AN/A列挙型の宣言enumenum (Java SE 5から, のサブクラス扱い)enumEnum、End Enumtypename=(enm1,enm2,...)N/Aアノテーション・属性の宣言N/A@interface アノテーション名 (のサブインタフェース扱い)class 属性名 : Attribute<AttributeUsage(AttributeTargets.All)>Class 属性名:Inherits Attribute、End ClassN/AN/Aアノテーション・属性の使用N/A@アノテーション名(変数名1=値1,変数名2=値2...)[属性名1(変数名1=値1,変数名2=値2...),属性名2(...)...]<属性名1(引数1,引数2,...,変数名1:=値1,変数名2:=値2...),属性名2(...)...>N/AN/Aジェネリック型・テンプレート	型名<パラメータ1,パラメータ2...>クラス名<パラメータ1,パラメータ2...>型名<パラメータ1,パラメータ2...>型名(Of パラメータ1,パラメータ2...)N/AN/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/AN/Aジェネリック型パラメータのワイルドカード指定N/Aクラス名<?, ?, ?, ...>N/AN/AN/AN/A

外部リンク
 MSDN .NET言語キーワード比較
 ひしだまによるキーワード比較

*ひかく
Category:ソフトウェアの比較