メソッドの引数にクラス配列を指定した場合…?
- クラスmainCには問題はなく理解もできますが、クラスquestionDのメソッドで引数にクラス配列を指定している場合、どのように呼び出せば良いか分かりません。
- また、questionDのメソッドでsuperAやsubBのint変数をどのように利用すれば良いのかも分かりません。
- 初心者のため、間違った言葉の使い方や意味の不明な点があるかもしれません。補足があればお願いします。
- ベストアンサー
メソッドの引数にクラス配列を指定した場合…?
問題のソースの構造を簡略化して書きます。 class superA { } class subB extends superA { } class mainC { public static void main(String[] abc) { /* superAとsubBをインスタンス化して 利用。int変数に値を入れている。 */ } } class questionD { public static int EEE(superA[] FFF) { } } クラスmainCまではなんの問題もなく理解もできますし、ちゃんと動くのですが、問題はクラスquestionDで 指定されている上のメソッド(int EEE(superA[] FFF))でmainCで代入されたsuperAやsubBの変数の値を使って、その和を返せ というものなんですが まず引数にクラス配列を指定してる場合、どのようにしてmainCで呼び出せばいいのでしょうか? また、どのようにしてquestionDでsuperAやsubBのint変数を利用すればいいのでしょうか? 教えてください。よろしくお願いします。 まだjavaをはじめて間もないので間違った言葉の使い方や意味の不明な点がありましたら補足要求でお願いします。
- masaru2032
- お礼率40% (13/32)
- Java
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> まず引数にクラス配列を指定してる場合、どのようにしてmainCで呼び出せばいいのでしょうか? 引数が配列でもクラスでも特に普通の関数と呼び出し方は変わりません。 >どのようにしてquestionDでsuperAやsubBのint変数を利用すればいいのでしょうか? そのint変数がどこにあるか分からないのでなんとも・・・ とりあえずsuperAやsubBの詳細が分からないので中身を適当に作ってますがこんな感じで。 public class mainC { public static void main(String[] abc) { superA[] a_array = new superA[ 3 ]; a_array[ 0 ] = new subB( 1 ); a_array[ 1 ] = new subB( 2 ); a_array[ 2 ] = new subB( 3 ); int total = questionD.EEE( a_array ); System.out.println( total ); } } class superA { int aaa = 0; } class subB extends superA { public subB( int bbb ) { aaa = bbb; } } class questionD { public static int EEE(superA[] FFF) { int total = 0; for( int idx=0; idx<FFF.length; idx++ ) { if( FFF[ idx ] != null ) { total += FFF[ idx ].aaa; } } return( total ); } }
関連するQ&A
- クラス変数/メソッドとインスタンス変数/メソッドの見え方について
Javaの言語仕様(?)についてお教え下さい。 参照変数の型がインスタンスのスーパークラスの型の時、クラス変数/メソッドとインスタンス変数/メソッドの見え方が納得いかずに困っています。 以下のような条件の時です。 ・クラスが2つあり、1つはもう1つのクラスを継承しています。 それぞれを「スーパー」「サブ」と以下で呼びます。 ・インスタンスは"サブ"の型です。 ・上記インスタンスへの参照変数は"スーパー"のクラスの型です。 ・"スーパー"、"サブ"ともに【同名】の「クラス」変数/メソッド、「インスタンス」変数/メソッドがあります。 この場合に、"サブ"のインスタンスを参照している"スーパー"の型の変数を介し、それらにアクセスしたらどれが見えるか?という疑問です。 実験結果では以下のようになりました。 [フィールド] [メソッド] [1.static ] スーパーの スーパーの [2.非static] スーパーの サブの 納得いかないのは「2.非static」で「フィールド」が、「スーパーの」になるところです。 これも「サブの」になると思っていました。 なぜサブクラスのが見えないのでしょうか? 同名の変数なのでスーパークラスのはサブクラスので隠れされ、サブクラスのが見えると思っていたのですが。 参考書には以下のように書いてありました。 フィールドの場合、参照変数の型のものが見える。 メソッドの場合、インスタンスの型のものが見える。 私には不自然に感じられるのですが、「こういう仕様だから。」と納得するしか無いのでしょうか? 「なぜこうなるか」について説明がある文献、サイトなどありましたらお教えください。 参考までに以下が実験したサンプルコードと結果です。長くて申し訳ありません。 「サンプルコード」 public class Super { static int staticField = 10; int instanceField = 100; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class Sub extends Super { static int staticField = 90; int instanceField = 900; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class TestStatic { public static void main(String[] args) { // インスタンスはSub、参照変数もSub、という状態。 Sub sub = new Sub(); System.out.println( "実験1" ); System.out.println( "1.クラス変数 " + sub.staticField ); System.out.print( "2.クラスメソッド " ); sub.staticMethod(); System.out.println( "3.インスタンス変数 " + sub.instanceField ); System.out.print( "4.インスタンスメソッド " ); sub.instanceMethod(); // インスタンスはSub、参照変数はSuper、という状態。 Super sup = new Sub(); System.out.println( "実験2" ); System.out.println( "5.クラス変数 " + sup.staticField ); System.out.print( "6.クラスメソッド " ); sup.staticMethod(); System.out.println( "7.インスタンス変数 " + sup.instanceField ); System.out.print( "8.インスタンスメソッド " ); sup.instanceMethod(); } } 「結果」 実験1 1.クラス変数 90 2.クラスメソッド staticField = 90 3.インスタンス変数 900 4.インスタンスメソッド instanceField = 900 実験2 5.クラス変数 10 6.クラスメソッド staticField = 10 7.インスタンス変数 100 8.インスタンスメソッド instanceField = 900 納得が行かないのは7のところです。 以上よろしくお願いいたします。
- ベストアンサー
- Java
- メソッドの引数としてのthisの意味
java初心者です。教えてください。 メソッドの引数としてのthisは何を表しているのですか? いろいろ調べてみてthisには以下の2つの使用法があることがわかりました。 1.インスタンス変数の名前とインスタンスメソッド内のローカル変数名がかぶったときに、メソッド内でインスタンス変数を表すときにthis.変数名とする。 2.あるクラスのコンストラクタ内で、同じクラスの別のコンストラクタを呼ぶときに使う。 しかし、引数としてのthisの意味がわかりません。 具体的には、addMouseListener(this);や、g.drawImage(img,10,10,this);のthisです。 後者の場合はオブジェクトgのインスタンスメソッドなので、thisはオブジェクトgへの参照を表しているのでしょうか?
- ベストアンサー
- Java
- クラスメソッドの仕様
次のようなクラスメソッドを作りたいのですが、自分で作って見たところ、どのような点を修正すればいいか分かりません。 どうか教えてください。 (1) 次に示す内容を満たすバー(Bar)クラスを作成せよ。 1. バーの右端のx座標(=バーの長さ)、バーの名前を扱う2つのprivateなインスタンス変数を持つ。 2. バーの総数を扱うprivateなクラス変数を持つ。ただし、 ここでいう総数とは、(1)コンストラクタで作成したもの、(2)代入操作で作成したもの、の両方を含む。 3. 引数無しのコンストラクタが呼び出されてバーオブジェクトが作成されると、そのバーのx座標は0以上400未満でランダムに決定され、名前は文字「A」とランダムに決定された0以上10000未満の整数が連接されたものに決定される。 4. バーのx座標を設定するインスタンスメソッドを持つ。 5. バーの名前を設定するインスタンスメソッドを持つ。 6. バーのx座標を取得するインスタンスメソッドを持つ。 7. バーの名前を取得するインスタンスメソッドを持つ。 8. 作成されたバーの総数を取得するクラスメソッドを持つ。 9. 作成されたバーの総数を1増やすクラスメソッドを持つ。 10. 作成されたバーの総数を1減らすクラスメソッドを持つ。 これを自分なりに解釈したところ、 class Bar{ private int x; private String name; private int count; private Bar(){ x=0; count=0; name=""; } public void Bar(){ x = (int)(Math.random()*400); name = "A" + (int)(Math.random()*10000); } public void setBar(int bx){ x=bx; } public void setName(String nm){ name=nm; } public void getX(int bx){ } public void getName(String nm){ } public void getCount(int c){ } } どうか御教授お願いします。
- 締切済み
- Java
- C#にてクラス・メソッドを文字列で指定
お世話になります。このカテゴリーで良いか微妙ですが。。。 C#で、以下のようにインスタンス生成+メソッド起動を行う処理について、クラス名とメソッド名を文字列で指定し、実行することはできないでしょうか? 尚、メソッドの引数は常に「ref strdata」の固定であるという前提で構いません。 ご教授、お願いします。 --------------------------------------------------- //引数(参照渡し)用の変数 strring strdata = string.Empty; //クラスcsTestのインスタンス生成 csTest insTest = new csTest(); //メソッドmsTestを実行 insTest.msTest(ref strdata);
- ベストアンサー
- C・C++・C#
- メソッドの引数に指定されているインタフェースについて
最近サーブレットをいじっているので例としてサーブレットを扱いますが、一般的な話題として扱っていただければと存じます。 非常に質問を文章化しにくいのですが・・ たとえば、クラスHttpServletには以下のようなメソッドがあります。 doGet(HttpServletRequest req, HttpServletResponse resp) このメソッドの引数に指定されているHttpServletRequest/Responseはいずれもインタフェースなわけですが、メソッドの引数にインタフェースを指定するというのは、具体的にどういうことなのでしょうか? これがたとえばintだったりStringだったりした場合は簡単にイメージできるのですが、インタフェースだとさっぱりわかりません。 質問がわかりにくいかもしれませんが、よろしくお願いいたします。
- ベストアンサー
- Java
- テンプレートクラスでのクラス変数
テンプレートから生成したクラスごとにクラス変数を設けて、 かつ、クラス変数の初期化をいちいちやらなくてもよい という状況を作りたいと考えています。 そこでたとえば template <int N> class test { public: static int class_var() { static int class_var_ = N; return class_var_; } }; としたとき test<1>::class_var() と test<2>::class_var() はどのような値になるのでしょうか? VC++ではテンプレート全体で class_var_の値が同じになってしまうようのなのですが。。。 そもそも、こういうクラス変数自体を つくろうという考えが間違っているのでしょうか? どなたかご存知でしたらお教えください。
- ベストアンサー
- C・C++・C#
- Java クラスを使ったソート
Javaで隣接交換法を用いて配列dataを昇順に並び替え、出力するプログラムを作成する。 ただし、ループ処理には、int型の変数は使わず、以下のCounterクラスを使用する。 という課題が出て、とり組んでみたのですが所々よく分からないので、お力添えしていただければと思います。 課題には下記のような条件が書いてありました。 配列data={54,76,32,89,45,11,8,54,29,67}; [クラス] Counter [インスタンス変数] int型の値を保持するcount [コンストラクタ] 引数で渡された値を初期値としてインスタンス変数に設定する。 引数を省略された場合、ゼロを設定する。 [メソッド] increment 値に1加算する decrement 値に1減算する compareTo 以下の処理を行う Counterの保持している値が引数に指定された値と 等しい場合、値0を返す。 Counterの保持している値が引数に指定された値より 小さい場合、0より小さい値を返す。 Counterの保持している値が引数に指定された値より 大きい場合、0より大きい値を返す。 get Counterの保持している値を添え字として、 引数で渡された配列の要素を取得します。 set Counterの保持している値を添え字として、 第1引数で渡された配列に第2引数で渡された値を設定します。 以下組んだものです。 ---- class Counter { int count = 0; Counter(int count) { this.count = count; } Counter() { this.count = 0; } public int get(int[] data) { return this.count; } public void set(int[] data, int count) { this.count = count; } public void increment() { this.count = count + 1; } public void decrement() { this.count = count - 1; } public int compareTo() { return count; } } public class Lesson09 { public static void main(String args[]) { Counter counter = new Counter(0); int[] data = {54, 76, 32, 89, 45, 11, 8, 54, 67}; counter.get(data); counter.set(data, 0); } } ---- とりあえず、compareToとsetとgetの部分をどう記述していいのかがよく分かりません。 よろしくお願いします。
- ベストアンサー
- Java
- 初歩的な メソッドの引数について
参考書のサンプルなんですが、 Carクラスのメソッドの引数のところで num = n と代入しているのですが、 これを直接void setNum(int num)としたほうがらくだと思うのですがなにか意味があるのでしょうか? class Sample4{ public static void main(String args[]){ Car car1 = new Car(); car1.setNum(33); } } class Car{ int num; void setNum(int n){ num = n; System.out.println("台数" + num); } }
- ベストアンサー
- Java
- クラスやメソッドが理解できません
今javaを勉強中なのですが、クラスやメソッドで生きず待ってしまいました。 メソッドの定義は 戻り値の型 メソッド名(引数リスト) { 文; ・・・ return 式; } ですが、メソッドから返されえる値を戻り値といますよね?呼び出し元に値を返すってどういうことなのでしょうか? int getNum() { System.out.println("調べました") return num; } たとえば、上記のようなものですが。もしも、このメソッドを呼び出すと、”戻り値”が戻ってくるわけですが、これはgetNumという変数のなかに計算式が入っている?という考え方でいいのでしょうか? よろしくお願いいたします。
- ベストアンサー
- Java
- static methodの引数thisについて
javaの『static メソッド』の中では、thisが使用できないようです(再質問)。 毎度、お世話になります。 出来れば、下記のコードでthisの部分の変更をお教え頂けないでしょうか? 尚、この場合のthisは、myclsFFTクラスの中の、Thread(this)の引数と なっています(下記のコード参照)。 Q1) このthisに代わる記述、方法はありますか? static void start_threadFFT(int sw_curve){ ..... new Thread(this).start(); .... } 以上、宜しくお願い申し上げます。 ========================================== public class myclsFFT extends myDrawClass implements Runnable{ myclsFFT(){ } static void start_threadFFT(int sw_curve){ ..... new Thread(this).start(); .... } ...... } ==========================================
- ベストアンサー
- Java
お礼
ありがとうございました!! おかげさまで完成させることができました!!