4

Javaでは、クラス内でメソッドを宣言してから、クラス内またはクラス外でメソッドを定義できますか?

C ++に似たものを探しています。宣言してから、クラスの外で::形式を使用して後で定義しますか?

また、メソッドをオーバーロードしないでください。

4

2 に答える 2

5

C ++メンバー関数は、「クラス外」で定義されることはありません。Class_Name::プレフィックスはそれらをクラス内に配置します。それらはクラス宣言に含まれていません。

個別のコンパイルモデルはテキストファイルのインクルードに基づいているため、C++では宣言と定義の分割が必要になります。クラスに関する詳細情報は、コンパイルされたオブジェクトファイルから取得できないため、タイプ情報の要約がヘッダーファイルに分解され、そのクラスのすべてのクライアントモジュールにインクルードされる必要があります。Javaには、ヘッダーファイルなしでクラスに関する情報を取得できる、より洗練されたオブジェクトファイル形式があります。

言語で発生する宣言のもう1つの必要性は、関数間または他の形式の循環参照の相互再帰のケースを処理することです(たとえば、プログラムを個別のモジュールに分割することをサポートしていなかったWirthの元のPascal言語で必要です)。Javaは、前方宣言を必要とせずに相互再帰を実行します。完全に解析されるまで型チェックを延期する必要があります。Pascalの前方宣言は、相互再帰を可能にするためではなく、1つのパスでコンパイルできるようにするためのものです。これにより、ある関数のコードを出力してから、次の関数をコンパイルできます。(これは、ハードウェアが1968年に構築されたときに重要です。)

宣言を不要にする言語を使用している場合、なぜ宣言を元に戻す方法をわざわざ探す必要があるのでしょうか。それはあなたが解放された後も刑務所の食べ物を食べ続けるようなものです。(これは「学習性無力感」の例かもしれません。)

とにかく、何十年にもわたる型システムの最先端は、宣言を可能な限り回避し、代わりに型推論に依存する設計によって特徴づけられてきました。何かを成し遂げるためにC++でクラス名を何回書かなければならないかを見てください。class myclass { public: myclass(); }; myclass::myclass() { /* constructor */ }myclassクラス宣言の外部で定義されたコンストラクターを使用して、何もしないダミークラスを作成するための4回の繰り返し。

于 2012-04-19T21:07:13.680 に答える
3

Javaではこれを行うことはできません。非抽象メソッドを宣言するときはいつでも、それを定義する必要があります。抽象メソッドには定義がないため、この質問の範囲を超えています。

于 2012-04-19T20:41:17.043 に答える