ホームページ >バックエンド開発 >C#.Net チュートリアル >C# と JAVA のオブジェクト指向構文の違いを比較する
オブジェクト指向は開発のアイデアです。覚えておくべき最も重要なことは、すべてがオブジェクトであるということです。プログラムをよりよく理解して作成できるようにするために、現実の物事を記述する方法とアイデアがプログラムに統合され、これがオブジェクト指向の思考になります。生活の中の物事をプログラムに統合するには、記述を特性と動作の 2 つの側面に分けて、それぞれの種類のオブジェクトをより適切に記述する方法が必要です。 , すると、プログラミングの世界から抽出されたクラスの概念は、人生における型の概念に相当します。あらゆるものには型が必要です。そして、人生の物事をさまざまな側面に従って分類すると、プログラミングにおけるすべてのクラスも、非常に抽象的であり、かなりの不確実性とランダム性を持っています。
クラスの構成:
Javaのクラスには属性とメソッドが含まれます。属性とはクラス内の変数で、静的変数、インスタンス変数(グローバル変数)、ローカル変数(メソッド内に存在し、宣言サイクルはメソッドの呼び出しフェーズに限定される)に分けられます
C#のクラスには以下のものがあります。フィールド、属性、メソッド。フィールドは Java の属性に対応します。C# の属性オブジェクトと Java の get アクセサーと set アクセサーは同じであり、どちらも動作を記述します。
クラスメンバーの呼び出し:
インスタンスメンバーはオブジェクトによって呼び出されます。静的メンバーはクラスによって呼び出されます。ただし、Java では静的メンバーをインスタンスによって呼び出すこともできるため、クラス内のすべての生徒が授業料を自由に制御できることになり、これは非常に悪い問題です。 C# はこの点で厳しく制限されており、静的メンバーはクラスによってのみ呼び出すことができます。
3つの主要な機能 - カプセル化
カプセル化:内部実装の詳細を隠し、データセキュリティ保護とコード再利用の効果を実現する手段。
カプセル化はどこにでもあり、一見シンプルですが無限に拡張可能です。カプセル化のための明示的なキーワードはありません。アイデアとメソッドであるため、Java と C# の間に文法的な違いはありません。ただ、カプセル化の効果を実現するためにアクセス修飾子を使用する場合、2 つの言語のアクセス修飾子は異なります。
Javaの場合:
private:プライベート、内部からのみアクセス可能
Dufault:デフォルト、同じパッケージ内の内部からアクセス可能。
保護: 保護されており、同じパッケージまたは異なるパッケージのサブクラス内でアクセス可能です。
パブリック:パブリック、どこからでもアクセス可能。
特徴: 明確なサイズ所有関係があります: private
(アセンブリの概念を導入しています。名前空間は Java のパッケージに似ていますが、論理的なグループ化です)それはJavaでは)パッケージは物理的なグループであり、アセンブリはプロジェクトに似ています):
private:プライベート、内部でのみアクセス可能。
internal: 内部、同じアセンブリ内でアクセス可能、デフォルトと同じ。
保護:保護されており、サブクラスでアクセスできますが、Javaの保護とは異なり、ここでのスコープは小さく、同じアセンブリ内の非サブクラスはアクセスできません。
保護された内部: 内部アクセス スコープと保護されたアクセス スコープの結合です。
パブリック:パブリック、どこからでもアクセス可能。
特徴: 明確なサイズの所有関係がなく、内部と保護のアクセス範囲のサイズが不明瞭です。
3 つの主要な特徴 - 継承
継承: 目的は、あるクラスに別のクラスのプロパティとメソッドを持たせることです。
Java の場合: extends を使用して継承の使用を示します
書き換えの要件: a. メソッド名、戻り値の型、パラメーターが同じであること b. アクセス修飾子のアクセス範囲が同じであること。親クラスのメソッドのアクセス修飾子;
親クラスのメンバーにアクセス: super キーワードを使用すると、コンストラクター メソッドで呼び出される親クラスのコンストラクター メソッドを指定できます。
C#の場合: use: 継承の使用を示します
書き換えの要件: a. メソッド名、戻り値の型、パラメータ、およびアクセス修飾子が同じであること b. 親クラスのメソッドが virtual によって変更されること。サブクラスのメソッドはオーバーライドによって変更されます
親クラスに正常にアクセスします:base キーワードを使用し、コンストラクター メソッドの後に Base (パラメーター) を使用して、親クラスのコンストラクター メソッドを呼び出すように指定します。base は静的環境では使用できません。親クラスの静的メンバーを呼び出すことはできません。
Covering: 新しいキーワードを使用します。 C# のオーバーライドの内容を紹介します。親クラスの非仮想メソッド、つまりオーバーライドできないメソッドの場合、オーバーライドを使用すると親クラスのメソッドをオーバーライドできます。上書きについての私の考えは、オーバーライドするためにメソッドを仮想で変更する必要があるという制限から生じる可能性のある問題を補うことです。ただし、それが使用できない場合は、上書きはあまり意味がありません。 、または上書きの実際の役割と効果をあまり理解していません。使用する場合は、専門家がコメントして疑問を解消できます。
書き換えが成功したかどうかの判断基準:親クラスのオブジェクトを指すメソッドが親クラスのメソッドを呼び出した場合、書き換えは失敗となります。書き換えは成功しました。
3つの主要な機能 - ポリモーフィズム
ポリモーフィズム: 同じ動作の複数の存在形式。症状には、オーバーロードと書き換えが含まれます。
オーバーロードの要件: a. 同じクラス内; c. パラメーターが異なる (パラメーターの数、型、順序)。
呼び出すときは、渡されたパラメータに基づいてどのメソッドを呼び出すかを決定します。
抽象クラスとインターフェース
抽象クラス:abstractで変更されたクラスは抽象クラスと呼ばれます。
出典: 私の意見では、抽象クラスのソースについては、理解を深めるために慎重に検討する価値があります。現実にはこのような問題がたくさんあります。つまり、この種のものがこの動作 (方法) を行うことはわかっていますが、それを行う方法がわかりません。たとえば、動物が動くことは誰もが知っていますが、あなたはそれを行うことができません。それぞれの動物がどのように動くのかわかりません。この時点でこの Animal クラスを定義する場合、必要なのはメソッド ヘッダー (何を行うかを記述する) のみで、メソッド本体 (その実行方法を記述する) がないためです。このメソッドは非常に特殊です。抽象メソッドとして使用する場合は、抽象変更を使用します。
Animalクラスには抽象メソッドがあるのですが、Animalクラスをインスタンス化した場合、moveメソッドを呼び出すとどのような問題が発生するのでしょうか?やり方が書いてないので不明。したがって、この未知の状況を回避するために、たとえば、Animal クラスは抽象クラスとして定義されます。注目すべき特徴は、インスタンス化できないことです。インスタンス化できないクラスの場合、その非静的メンバーを呼び出すことはできません。そのようなクラスの存在にはどのような意味があるのでしょうか。
要約: 抽象クラスの存在の意味は継承されることです。抽象クラスは抽象メソッド用に存在しますが、コンストラクタはありますが、インスタンス化することはできません。この点では、Java と C# は文法的に同じであるため、詳細は説明しません。
インターフェース: すべての実装クラスがこれらのルールと仕様を満たすように策定された一連のルールと仕様。実際のアプリケーションでは、プログラムの柔軟性を大幅に高めることができます。私のインターフェイス指向プログラミングに対する理解はそれほど深いわけではなく、たった 1 ~ 2 文で明確に説明することもできません。自分の経験を投稿し、そこから学ぶことができる専門家がいます。
違い: C# では、実装クラスがインターフェイス内のすべてのメソッドを実装していない場合、たとえば、自身を抽象クラスとして定義し、実装されていないメソッドを再コピーして抽象メソッドとして定義できます。
まとめ
私は長い間Java開発をしてきましたが、C#は教育のニーズのために学んだだけです。類似点があり、すぐに学ぶことができます。ここでは構文のみに焦点を当てます。大手はプロトコルに取り組んでおり、最下位層に取り組んでいます。そのため、彼らはこれを好みません。
以上がC# と JAVA のオブジェクト指向構文の違いを比較するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。