僕はまだJavaを勉強し始めて1ヶ月ぐらいの初心者なんですけども、現段階では基本的な文法を勉強し終えた(かなと思っている)ので、Swingのほうに早速とりかかりました。その際にすごく疑問に思ったことがあるので、皆さんにお尋ねします。
public class A
......main.....
class B extends Frame{
public B(String stitle){
super(stitle);
}
}
super(stitle)のところでFrameクラスのコンストラクタが呼び出されていますよね。そこでFrameクラスのコンストラクタの定義を見てみると、僕が今まで学んできたような定義がなされていないんですけども。僕が今まで学んできたものというのは、
class Car
{
private int num;
private double gas;
public Car()
{
System.out.println(車を作成しました。)
}
}
class C
{
....main...
{
Car car1=new Car();
}
}
この場合の実行結果というのは、
「車を作成しました。」という文章が表示されはづですけど、これって言うのはSystem.out.println(車を作成しました。)のようにきちんと定義しているからですよね。それに対してFrameクラスのコンストラクタの定義には説明はあるものの、実行処理するための定義がされていないような気がするんですけども・・・。まだ僕はオブジェクト指向というものを理解できていないから、このようなわけのわからない質問をしている(と思う)のですが、よろしければどなたか分かりやすく教えてください。
No.1
- 回答日時:
質問拝見させていただきました。
現役のJavaプログラマです。
早速Frameクラスの定義を見てみたのですが
コンストラクタの部分だけ抜粋すると
public class Frame extends Window implements MenuContainer {
public Frame() {
this("");
}
public Frame(String title) {
this.title = title;
visible = false;
setLayout(new BorderLayout());
weakThis = new WeakReference(this);
addToFrameList();
}
}
このように記述されていました。
これって、”実行処理するための定義”だと思うんですけどfumi11さんはどう思われます?
わからないところがあれば補足してください。
ちなみに私の使用している開発環境はVAJ3.5を使用しています。
この回答への補足
JavaSoft社のHPを見てみると、Frameクラスのコンストラクタの詳細は次のように書かれていました。
Frame()
初期状態で可視ではない Frame の新しいインスタンスを生成します。
Frame(GraphicsConfiguration gc)
スクリーンデバイスの指定した GraphicsConfiguration がある Frame を作成します。
Frame(String title)
指定されたタイトルで、初期状態で可視ではない新しい Frame オブジェクトを構築します。
Frame(String title, GraphicsConfiguration gc)
指定されたタイトルと GraphicsConfiguration で、最初は不可視である新しい Frame オブジェクトを構築します。
これを見て僕は思ったんですけども、Frame()の説明として「初期状態で可視ではない Frame の新しいインスタンスを生成します。」とは書いてあるものの、具体的な中身というか、実行処理するための定義がされてないではないか!!と思ったわけです。
でもxinmanさんのおかげで、Frameクラスのコンストラクタの定義がきちんとあることがわかりました。そこでお聞きしたいのですが、僕が使っているSDK1.3ではコンストラクタの定義をどうやって調べればいいのでしょうか?僕が調べたJavaSoft社のHPでは、先ほど述べたようなことしか書かれていなくてコンストラクタの定義らしい定義が見つからないのですが・・・。
No.2ベストアンサー
- 回答日時:
最初に、へんなことを回答していたらすみません。
(先に謝っておこう・・・(^^ゞ)まず、前者のクラスAですがAクラスのなかでBクラスという子供のクラスを作成しています。
おそらくAクラス内ちょっと手を加えた(継承した)FrameBクラス
を使用したかったのでしょう。そこにはありませんがAクラスの
コンストラクタが本当はあるはすです。
後者のCarクラスはCarクラスのコンストラクタが記述してありますね。
迷ってしまったのは前者にAクラスのコンストラクタがなかったからじゃないかなと思いますが間違っていますか?
また「実行処理するのための定義」というお話がありますが、コンストラクタ内はそう考えるよりも
「クラス自身がとりあえず最初にしておくことを書く」
と考えたほうがいいと思います。本来ユーザ(PGを作る人)
はコンストラクタ内をそれほど意識する必要がないからです。
例えばFrame( String title )を考えてみましょう。
Frame frame = new Frame( "たいとる君" );
としたら新しく作られるframeのタイトルは「たいとる君」になります。
ここでの「とりあえずしておくこと」は「とりあえずタイトルをつけておこう」と言うことになります。
ユーザはどうやってタイトルが「たいとる君」にセットされるのかは
深く知る必要がなく「このコンストラクタを実行すれば勝手にタイトルがセットされるのだ
ということさえ知っておけばいいのです。
ちなみにコンストラクタ内の定義などを知りたい場合はJBuilderなんかを使うとクラス内に
何が書いてあるのか見えちゃったりすると思いました。
(もっといい方法があるかも&うそだったすいません)
この回答への補足
たいとる君、分かりやすい例ですね。(笑)
なるほど、実行処理するための定義はそれほど気にしなくてもよかったんですね。でも、やっぱり気になる。(笑)
xinmanさんのおかげでFrameクラスのコンストラクタの定義が具体的にどのように記述されているのかがわかりました。そして実際にコンストラクタを使う際にはそれほどコンストラクタを意識しなくても良いのだということがct27さんのご説明でわかりました。たぶん理解できたは思いますが、また同じ所でつまずいてしまったら再び似たような質問をさせていただくことと思います。その時はどうぞよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java java final 1 2022/06/10 22:49
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java javaのクラスの分け方について質問です。 APIの内部用と外部用でクラスを分けたいのですがインター 2 2022/04/26 16:06
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- Java Java 配列<選挙> 4 2023/07/31 15:07
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クラス間でのデータ参照
-
関数内の変数に<summary>コメン...
-
範囲外の数値を代入したらエラ...
-
親クラスから子クラスへアクセス。
-
ASP Pageの孫継承のPage_Load
-
構造 他のクラスの構造体を別...
-
C# インターフェイスの実装
-
C++でfriendクラスにしているの...
-
java-別クラスの変数の使い方を...
-
c++,ある関数のクラスから別の...
-
C#でほかのファイルにある自作...
-
違うクラスからの変数の共有化
-
C++/C#間での構造体の引き渡し...
-
Strategyパターンを用いた実装...
-
import と extends について
-
a href="..." とServlet
-
C#にて別クラスの関数を使いたい
-
javaでメインクラスが見つから...
-
無名パッケージからのインポート
-
Javaでswingの画面変わる際に他...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数内の変数に<summary>コメン...
-
クラス間でのデータ参照
-
c++,ある関数のクラスから別の...
-
範囲外の数値を代入したらエラ...
-
C#にて別クラスの関数を使いたい
-
C#でほかのファイルにある自作...
-
C++でfriendクラスにしているの...
-
java-別クラスの変数の使い方を...
-
親クラスから子クラスへアクセス。
-
構造 他のクラスの構造体を別...
-
ひとつのファイルにクラスは1つ?
-
Java
-
import と extends について
-
継承したクラス側のクラス名の取得
-
SwingでgetContentPaneのエラー...
-
Java リフレクションについて
-
C#のクラスライブラリでメッセ...
-
アップキャスト、ダウンキャス...
-
C# インターフェイスの実装
-
visual studioのデザイナ画面で...
おすすめ情報