• 締切済み

Java:クラスのインスタンスを配列の要素にする?

問題集で次のプログラムを見掛ました。 A[] array = {new B(), new C()}; クラスA型の配列変数arrayにクラスBとクラスCのインスタンスを要素として代入しています。 このような配列を作成した場合、具体的にどのような使い方があるのでしょうか? 簡単なプログラムを書いて頂けると嬉しいです。 よろしくお願いします。

noname#225019
noname#225019
  • Java
  • 回答数5
  • ありがとう数0

みんなの回答

回答No.5

>>セキュリティーの強化によりアプレットに電子署名を付けるか、またはユーザーが下記の設定をしないとアプレットが表示できなくなりました。 >> >>WebブラウザでJavaを有効にするには >>https://java.com/ja/download/help/enable_browser.xml >> >>Java「セキュリティ設定によってブロックされたアプリケーション」の解除方法 >>http://www.geocities.co.jp/Playtown-Yoyo/6130/notes/virus-java-security.htm >> >>例外サイト・リストに このサイトのトップ・アドレスの「http://artemis.rosx.net/」を設定して下さい。 >申し訳ございません、ちょっとアドレスを変更してしていました、(効率が悪いので)表示に少々 時間がかかる場合があります。 >http://artemis.rosx.net/museum/myapplet/Figure0K/AppFigure0K.htm なんかサーバーの調子が悪いのか正常に表示できないようです、下記アドレスにもアップしました、(効率が悪いので)表示に少々 時間がかかる場合があります。 http://pleiades1335.x1xhosting.com/museum/myapplet/Figure0K/AppFigure0K.htm 例外サイト・リストに このサイトのトップ・アドレスの「http://pleiades1335.x1xhosting.com/」を設定して下さい。

回答No.4

>どうもclassファイルをJARに圧縮するとアプレットが表示できなくなるようだ(^_^;) JARファイルは電子署名でも付けろと言う事だろうか? >下記はJARに圧縮してないclassファイル群のアプレットです(JARに圧縮してないので効率が悪い)。 >http://artemis.rosx.net/museum/myapplet/AppFigure0K/AppFigure0K.htm > >セキュリティーの強化によりアプレットに電子署名を付けるか、またはユーザーが下記の設定をしないとアプレットが表示できなくなりました。 > >WebブラウザでJavaを有効にするには >https://java.com/ja/download/help/enable_browser.xml > >Java「セキュリティ設定によってブロックされたアプリケーション」の解除方法 >http://www.geocities.co.jp/Playtown-Yoyo/6130/notes/virus-java-security.htm > >例外サイト・リストに このサイトのトップ・アドレスの「http://artemis.rosx.net/」を設定して下さい。 申し訳ございません、ちょっとアドレスを変更してしていました、(効率が悪いので)表示に少々 時間がかかる場合があります。 http://artemis.rosx.net/museum/myapplet/Figure0K/AppFigure0K.htm

回答No.3

>古いJavaでコンパイルしているせいか?、アプレットとして実行できません。 どうもclassファイルをJARに圧縮するとアプレットが表示できなくなるようだ(^_^;) JARファイルは電子署名でも付けろと言う事だろうか? 下記はJARに圧縮してないclassファイル群のアプレットです(JARに圧縮してないので効率が悪い)。 http://artemis.rosx.net/museum/myapplet/AppFigure0K/AppFigure0K.htm セキュリティーの強化によりアプレットに電子署名を付けるか、またはユーザーが下記の設定をしないとアプレットが表示できなくなりました。 WebブラウザでJavaを有効にするには https://java.com/ja/download/help/enable_browser.xml Java「セキュリティ設定によってブロックされたアプリケーション」の解除方法 http://www.geocities.co.jp/Playtown-Yoyo/6130/notes/virus-java-security.htm 例外サイト・リストに このサイトのトップ・アドレスの「http://artemis.rosx.net/」を設定して下さい。

回答No.2

簡単にざっくりと説明すると figure(図形)と言う抽象クラスにdraw(描画)と言う抽象メソッドを作ったとして figure(図形)を継承したline(線)と言うクラスに(本当にデータを描画可能な)drawと言うメソッドを作り figure(図形)を継承したarc(円弧)と言うクラスに(本当にデータを描画可能な)drawと言うメソッドを作り figure(図形)を継承したspline(自由曲線)と言うクラスに(本当にデータを描画可能な)drawと言うメソッドを作り それら「line(線)、arc(円弧)、spline(自由曲線)」のインスタンス(実態)は、figure(図形)の配列に代入可能です、そのfigure(図形)配列をループで1つ1つ最後までdraw(描画)を実行させれば、figure(図形)配列を全て表示できます。 このメリットはfigure(図形)配列の中に どんなインスタンス(実態)が代入されているか考える必要がなく、処理の単純化によりバグ発生率を低下させる事が可能です。 ただし、処理の共通化を可能にするメソッドを自分で考える必要があります、また どうしても処理の共通化ができない場合も有得ます(初心者の場合、初めから諦めずに処理の共通化が出来ると言う前提で設計した方が良いでしょう)。 下記は上記を実際のプログラムで描画した画像です。 下記は描画エンジンだけをJavaに移植したものなので、新たなデータを作成できません。 古いJavaでコンパイルしているせいか?、アプレットとして実行できません。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

プログラムは書けんけど、例えばAをInputStream、BをSocketInputStream、CをFileInputStreamとしましょう。そうすると Socket s = ...; InputStream[] array = { s.getInputStream(), new FileInputStream("/usr/local/src/a.c") }; Aは基本クラスあるいはインターフェース、BとCはAから派生したクラスあるいはインターフェースを実装したクラスになるのは分かると思いますが、配列にする理由はおそらく反復処理をさせたいからでしょう。 for(int i = 0; i < array.length(); i++) { InputStream is = array[i]; while(is.available() > 0) { int readeddata = is.read(); } } 基本クラスAの抽象メソッド(BとCでオーバーライドできるなら別に普通のメソッドでも良い)に対してBとCでそれぞれ別の動きをつけ、配列に対して反復でそれらのメソッド(上のサンプルプログラムではavairable()とread())を呼び出すという使い道があります。 具体的にどのような場面で反復が役に立つかと言うと・・・・。 プラグインを扱う事ができるプログラム(例えばお絵かきソフトをJavaで作ったとすると、フィルターやブラシ、エフェクトなどをプラグインで機能追加できるようにしたいですね)ではメインプログラム起動時にプラグインディレクトリ中のJarファイルを一つ一つ見ていって、例えば先ほどのお絵かきソフトであればフィルタープラグインの基底クラスとして用意したAbstractFilterPluginクラスから派生したクラスが見つかればそれをインスタンス化してArrayList<AbstractFilterPlugin>の中に入れておくと便利そうです。 そしてAbstractFilterPluginクラスには抽象メソッドとしてプラグインの名前を返すgetName()、画像にフィルターをかけるexecuteFilter(Bitmap bitmap, int x, int y, int w, int h)を用意する事でしょう。 リストに入れたインスタンスたちを反復してgetName()で名前を取得するとフィルターのメニューを作る事ができそうです。

関連するQ&A

  • 配列から別の配列の要素を削除する方法

    ある配列array_aに、100件の文字列要素が格納されています。 別の配列array_bには、80件の文字列要素が格納されています。 array_aの要素、array_bの要素共に重複するものはありません。 array_b中に存在する要素はすべてarray_a中にも存在します。 array_aにあり、array_bにはない要素で構成されたarray_cの作り方を教えてください。 例えば $array_a=array("a","b","c","d","e","f","g"); $array_b=array("e","b","d"); なら、 $array_c=array("a","c","f","g") になります。 配列array_aとarray_bは、 $array_b=array("b","b","d"); であったり、 $array_a=array("a","a","b","c","d","e","f","g"); といった「重複する要素を含むパターン」はありません。要素はすべてユニークです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • インスタンス変数の特殊な参照

    次のようなクラスを考えたときに(特に意味があるものではないですが) class A{ int a; A(){ a = 10; B b = new B(); } } class B{ int b; B(){ b = 20; C c = new C(); } } class C{ int c; C(){ c = 20; } } Cのコンストラクタの中から、Aのインスタンス変数aやBでのbの値を 参照することって出来ないのでしょうか? 変数をクラス変数にする、引数として渡す以外の方法を探しています。

  • 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
  • Eclipse による Java プログラミングの配列について質問です

    Eclipse による Java プログラミングの配列について質問です。 下の二つの問題に対して、それぞれのソースコードを教えてください。よろしくお願いします。 1. int型配列aの要素の中で,正の値だけを順に配列bの要素に 代入して,その結果を表示するプログラムを作成しなさい. ※配列aの要素と配列bの要素をそれぞれ表示すること. (実行例) 配列a={5 -1 3 4 -2 7} 配列b={5 3 4 7} 2. int型配列dataの要素の中で,最大値と何番目の配列の要素が 最大値か表示するプログラムを作成しなさい. ※配列dataの要素も表示すること. (実行例) 配列data={31 41 59 26 53 58 37 97 93 23 84} 最大値は97です 最大値は7番目の配列の要素です

    • ベストアンサー
    • Java
  • 配列の要素追加について

    配列Aがあり、その配列に別の要素を加えた配列Bを作成するためにはどのようにすればよいのでしょうか? Aをコピーしたものに要素を一つ加えてと考えたのですが。。。 つまり char[] a = {'a', 'b', 'c'}; char ch = 'd'; とあったときに、aにchを加えて char[] b = {'a', 'b', 'c', 'd'}; を作成したいです。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • オブジェクトを配列として扱いたい

    Java(オブジェクト指向)を始めて数日の者です。 LinkedListを利用し、インスタンス化したオブジェクトをListに入れて 扱えるようにしたいと考えています。 具体的には LinkedList<クラス名> array = new LinkedList<クラス名>(); クラス名 object1 = new クラス名(); -object1の処理- array.add(object1); -object1の処理- array.add(object1); -object1の処理- array.add(object1); このようにして、object1を配列で管理するイメージです。 object1の処理結果は、毎度変わっています。 しかしこれですと、最後のobject1の処理の内容がすべてのarray(i)に入ってしまいます。 要は、array(i)は全て、同じobject1を参照しているだけ。 object1の変更結果がarray(i)に入っていくというイメージでは無い、ということでしょうか? また、この他でインスタンス化したものを配列で管理できるような方法がございましたら、ご教授いただけると幸いです。m(_ _)m 動的に配列の要素数を変更(要素が追加)ができるようにしたいのです。

    • ベストアンサー
    • Java
  • 3つの連想配列を交互に代入して、新しい連想配列を作りたい

    PHP Version 5.1.6を使っています。 それぞれの連想配列を先頭から順番に交互に代入したいのですが、 どのようなプログラムでできるのでしょうか? $arr1 = array(a1=>"aa1", a2=>"aa2", a3=>"aa3"); $arr2 = array(b1=>"bb1", b2=>"bb2", b3=>"bb3"); $arr3 = array(c1=>"cc1", c2=>"cc2", c3=>"cc3"); 代入後 $new_arr = array(  a1=>"aa1",  b1=>"bb1",  c1=>"cc1",  a2=>"aa2",  b2=>"bb2",  c2=>"cc2",  a3=>"aa3",  b3=>"bb3",  c3=>"cc3", );

    • ベストアンサー
    • PHP
  • 同一クラスインスタンス名で別クラスのインスタンス作成方法(C++)

    下記ソース(Java)の処理をするような、C++の実装方法を教えていただきたいです。 【処理内容】 クラスBのインスタンスを保持しており、クラスBのインスタンス名と同一であるクラスAのインスタンス生成 ClassA A_Instance = (ClassA)Class.forName(B_instance.name).newInstance(); 要はクラスインスタンスの名前の求め方がわからないのです。それさえわかれば、newしてクラスポインタを返すメソッドを用意すれば何とかなると考えていますが。 ※C++のAPI一覧はどこにあるのだろうか・・・

  • 要素数がプログラム内で変化する配列のクラス間のやりとり

    随分初歩的な質問をしているとは思うのですが、解決方法がみつからないので質問をお願いします。 C++で配列をクラスから呼び出すときに、そのクラスの要素数がプログラム内で変化する場合、 どのようにするのが良いのでしょうか? Class class_A { private: プログラム内で要素数が変化する配列 public: get_hairetu(){return 上の配列} } Class class_A::openfile { テキストからデータ読み込み データ数に応じて配列の大きさが変化 } int main(void) { class_A A; 配列=A.get_hairetu(); ↑ここでclass_Aで決定した配列の要素数に応じて配列の要素数を変化させたいです } なるべくリストではなく配列で作成したいのですが、配列を全クラスで共有する方法があればそちらをお願いします。 (class_Aとmainはそれぞれ別のcppファイルに記述しています) vector型で配列を作ることも考えたのですが、VC++ではなぜか使えませんでした。 質問内容が曖昧で申し訳ありませんが、ぜひ回答をお願いします。

  • インスタンス化されているかの情報を 知るメソッド

    VisualStudioC#で Aというクラスがあり、それを B,Cというクラスでインスタンスで使用したとします。 A: { ?????? } B: { A a = new A(); } C: { A a = new A(); } Aクラスの中の処理でB,Cのどちらでインスタンス化されているのかという情報を 知るメソッドはあるのでしょうか? ちなみにインスタンス化するときにAに引数などを送り込まないこととします。

専門家に質問してみよう