2012-04-19 12 views
3

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

私はC++に似たものを探していますが、それを宣言してからクラスの外で::フォーマットを使用して後で定義しますか?

また、メソッドをオーバーロードしません。

+1

ヘッダーファイルの後ろで欲しいと思ったら..... –

+2

なぜこれをやりたいのですか? –

答えて

5

C++のメンバー関数は決して "クラス外に"定義されません。接頭辞Class_Name::は、それらをクラスの中に置きます。それらはクラス宣言にはありません。

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

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

宣言を不要にする言語を使用している場合、それらを戻す方法を探すのはどうですか?あなたが解放された後も刑務所食べ物を食べ続けるようなものです。 (これは、「無力感を学んだ」のインスタンスであってもよい。)とにかく

、今可能な限り宣言を避け、型推論に代わりに頼るデザインでマークされている数十年のための型システムにおける技術の現状。何回もC++でクラス名を記述しなければ何もできません。 class myclass { public: myclass(); }; myclass::myclass() { /* constructor */ }myclassを4回繰り返して、何もしないダミークラスを作成し、クラス宣言の外で定義されたコンストラクタを作成します。

2

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

関連する問題