- ベストアンサー
JAVAで型を宣言するときの質問です
JAVAで型を宣言するとき CarFactory factory = new BusFactory(); のように 宣言の型はCarFactoryで、newで実際に代入するのは BusFactory()というのは どういう意味なのでしょうか? 式の左側と右側で違うクラスを書く場合は どのような点に気をつけなければならないでしょうか? ちなみにこちらのサイトにあったコードです ttp://www.syboos.jp/sysdesign/doc/20080609224443186.html
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- java 宣言と初期化
javaで配列の宣言と初期化をするとき int[] scores; scores = new int[4]; と書くと思いますが宣言と初期化を同時にすると int[] scores = new int[4];となると思いますが JPanelなどの生成でよく JPanel jp = new JPanel();などとよく見かけますが、これは JPanel jp; jp = new JPanel();と同じ意味ですか?
- ベストアンサー
- Java
- javaの「型」がよくわかりません。
java初心者です。 本日、参考書を読んでいるとき、次のような式および文がありました。なお、以下はスーパークラスにpersonクラスがあり、studentクラスとteacherクラスが継承しています。personクラスがworkメソッドを持ってます。 //通常の3倍働いてもらう void work(Person p){ p.work(); p.work(); p.work(); } 「引数をperson型にしているので、このworkメソッドにはstudentクラスとteacherクラスのインスタンスも渡すことができます。」 私の中で、型はあくまで指示的なもの、および宣言に利用するものだと思ってました。基本型なら「この形のものを作るよ」とか、voidなら「戻り値はないんだよ」とか。 結局「型」とは何なんでしょうか? 初心者にもわかるよう、教えていただけないでしょうか?よろしくお願いします。
- ベストアンサー
- Java
- Javaの配列の宣言方法のメリット?
1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言: int array[10]; Javaの配列宣言: int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、 int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。
- ベストアンサー
- Java
- メソッド宣言の戻り値の型にクラス名を使うには?
メソッドの戻り値の型にクラス名を使ってるプログラムを見かけたのですが、例えばクラス名を public class Player{ とします。そして Playerクラスのメソッド宣言に private Player(戻り値の型) startRun(メソッド名) { とあります。 これは戻り値の型にクラス型の変数を使ってユーザー定義してると思うのですが使い方が分かりません。 javaのサイトはできるだけ調べたのですが戻り値の型にクラス名を使うにはどうすればいいか分かりませんでした。 この使い方を教えてくれるサイトを教えてください。 基本型と参照型のStringクラスについて教えてくれるサイトはたくさん見かけたのですが…。 お願いします。
- ベストアンサー
- Java
- Java コード教えてください。
【Java】以下のコードを教えてください。 夕食のメニューを表示するプログラムの作成を行う。 以下の仕様を満たし、実行例のように 動作するSupperMenu.java、Supper.javaを作成しなさい。 [SupperMenu.java] String型のフィールドmaindish (主食)(初期値は設定しない)、sidedish(副菜・スープ)(初期値は設定しない)を持つ。 いずれもクラス外からはアクセスできない。 2つのコンストラクタを持つ。 引数を持たないコンストラクタは、コンストラクタを実行した際にSupperMenuクラス のフィールドmaindishとsidedishにそれぞれ”ムニエル”と”スープ”を代入する。 クラス 外からアクセスできる。 String 型の仮引数 md と sd を持つコンストラクタは、コンストラクタを実行した際に SupperMenuクラスのフィールドmaindishとsidedishにそれぞれmdとsdの文字列を 代入する。 クラス外からアクセスできる。 引数も戻り値も持たないメソッドshowMenu()を持つ。 maindishとsidedishの情報を用いて 夕食のメニューの表示を行う。 クラス外からアクセスできる。 [Supper.java] 以下の内容を記述する。 1 class Supper{ 2 public static void main( String [] args ){ 3 SupperMenu sm1 = new SupperMenu(); 4 SupperMenu sm2 = new SupperMenu("ステーキ", "サラダ"); 5 sm1.showMenu(); 6 sm2.showMenu(); 7 } 8 }
- 締切済み
- Java
- 【Java】参照型で宣言された変数名の抽出
現在、Javaを学習中の大学生です。 Javaのソースコードを解析し、その中で宣言されている変数名を抽出して、 変数表のようなものを作成するJavaプログラムを書いているのですが、 参照型(クラス型)で宣言されている変数名を抽出する方法が思いつきません。 よろしければ、何かアイディアをいただけないでしょうか。 プリミティブ型の変数については、StreamTokenizerクラスを利用しています。 コードをトークンに分解して、型名の次に来るワードトークンを変数名として抽出 するという、単純な方法を使っています。こちらも、改良すべき点などあれば、 アドバイスいただけるとありがたいです。 デバッガを使えば出来ないことはないようですが、 出来ればデバッガは使わない方法でお願いします。
- ベストアンサー
- Java
- Javaは全く扱ったことがないのですが、Javaのコードを読んでいて意
Javaは全く扱ったことがないのですが、Javaのコードを読んでいて意味の理解できないところがあったので質問させてください。 次のような宣言を行った場合、配列Xの内容はどうなるのでしょうか? 4つめの0x78だけはbyte型への型変換が行われていないようなのですが・・・。 final byte[] X = { (byte)0x12, (byte)0x34, (byte)0x56, 0x78}; よろしくおねがいします。
- ベストアンサー
- Java
- 【C++】メンバ変数をポインタで宣言するデメリット
クラスAが、メンバーとして、 クラスXと、クラスYを持っているとします。 そのようなとき、 【ケース1】 クラスAを定義する際、 メンバである、クラスX、クラスYは、ポインタで宣言させる。 【ケース2】 クラスAを定義する際、 メンバである、クラスX、クラスYは、ポインタではなく、クラスX/クラスYの型として宣言させる。 があると思いますが、それぞれどのようなデメリットがあるでしょうか? ----------------------------- 私は、ケース1は、 メリット: クラスXを継承したクラスChild_Xや、クラスYを継承したクラスChild_Yを、 クラスAで扱えるようになる。 デメリット: クラスXのポインタで宣言していると、クラスXを派生したクラスが格納可能であるため、 開発時に、そのメンバーに、実際にはどの型のクラスが格納されているかがわからず、 Visual Studio で追いかけられない。 (※そのメンバーに対して、右クリック⇒定義で見ても、どの型のポインタ変数かはわかっても、 どの型がそこに突っ込まれているかは、代入されているところを探して確認しないとわからない。) 私は、処理を確認する際、『どの型の値がそこに突っ込まれているかは、代入されているところを探して確認しないとわからない。』というのが、可読性は悪いわ、確認に時間が取られるわで、 非常に大きなデメリットと考えています。 このデメリットを解消する方法はあるのでしょうか?
- ベストアンサー
- C・C++・C#
- newしないインスタンス?実体化しなくてもいいの?
JAVAについて教えて下さい。 ServletContext application = getServletContext(); の成り立ちの意味なのですが、newがなぜないのか教えて下さい。 ~自身の考え~ (1)サーブレットコンテキストというクラスをインスタンス化して (サーブレットコンテキスト 変数A = new サーブレットコンテキスト();) ↑ ↑ クラス クラス (2)変数Aドットメソッド()によって、代入変数Bを作り上げる (サーブレットコンテキスト 代入変数B = 変数A . メソッド();) (3)のはずが、上記の式にはnewがありません。 なんで?? ~~ ~疑問点~ もしかしたらHttpServletでimportしているからそこでnewインスタンス化宣言している? だとするならどのような式になっているのでしょうか。 もしくはメソッドのF3キーとして上位をたどったときに出てきた public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { public ServletContext getServletContext() { return getServletConfig().getServletContext(); } } として抽象クラスが出てきましたが、どこにもnew実体化していません。 よろしくお願いいたします。
- ベストアンサー
- Java
- インスタンスの作る場合の型宣言
インスタンスの作る場合の型宣言 今晩は、JAVA初心者です、宜しくお願いします。 下のようなプログラムを書いてやりました。 //JFrame_Test jf = new JFrame_Test(); JFrame jf = new JFrame_Test(); と書き変えてやってもエラーもなく、正常に同じ動作をします。 この両者は文法的にはどのように違うものなのでしょうか。 どうも両者は別の意味を持っているような気がして、色々と調べてみましたが、 よく分かりませんでした。 また、JFrame jf = new JFrame(); とかいても、正常に動作します。 この違いもよく理解出来ないのですが、 これは、JFrame_Testではなく、JFrameという親クラスのオブジェクトを作っ ているということでしょうか、以上宜しくお願いします。 ======================================================== public class JFrame_Test extends JFrame { JFrame_Test() { setSize(200,200); } public void paint(Graphics g) { super.paint(g); g.drawString("XYZ",50,50); } public static void main(String[] args) { JFrame jf = new JFrame_Test(); // JFrame_Test jf = new JFrame_Test(); jf.setVisible(true); } }
- ベストアンサー
- Java