tt25mrc
@tt25mrc

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

java silver SE17 第7章-42

解決したいこと

以下の設問についての実行される順番がわかりません。

問題

1. import java.util. Collection;
2.
3. public class A {
4.    public void sample(Collection arg) {
5.       System.out.printin("A");
6.    }
7. }
1. import java.util.Collection;
2. import java.util.List;
3.
4. public class B extends A {
5.   public void sample(Collection arg) {
6.     System.out.println("B");
7.   }
8.   public void sample (List arg) {
9.    System.out.println("C");
10. }
11.}
1. import java.util.ArrayList;
2. import java.util.List;
3.
4. public class Main {
5.    public static void main(String[] args) {
6
7.       A a1 = new A();
8.       A a2 = new B();
9.       B b1 = new B();
10.
11.      List<String> list = new ArrayList<>();
12.
13.      // do something
14.
15.   } 
16. }

A.「a1.sample(list)」を実行すると、Aが表示される
B.「a2.sample(list)」を実行すると、Aが表示される
C.「a2.sample(list)」を実行すると、Bが表示される
D.「b1.sample(list)」を実行すると、Bが表示される
E.「b1.sample(list)」を実行すると、Cが表示される

答え A,C,E

疑問点

Mainクラスのmainメソッドから動く。
7〜9行目でインスタンス化している。
11行目でArrayListのlist変数を作成している。

13行目に何を入れるか。
Aの「a1.sample(list)」を入れたとして、別に現状は、引数の(list)に何も渡していないので、動かないが、何かを渡した時に、どう動くかを問われているということですか?

質問が、よく分からないと思いますが、ご教授願います。

0

2Answer

Aの「a1.sample(list)」を入れたとして、別に現状は、引数の(list)に何も渡していないので、動かないが、

13行目で実行するんなら11行目のlistを渡すというのが自然な解釈なんじゃないでしょうか.
do somethingとあるので察しはするでしょうが設問にちゃんと指示がありませんか?

1Like

Comments

  1. @tt25mrc

    Questioner

    設問には次のプログラムの説明として正しいものを選びなさい。としか記載がなく、Aの「a1.sample(list)」を入れたとしても、「list」自体には何も入れていないという認識なので、動かないのではと思っています。

  2. ならなおさら13行目に入れて実行しろと解釈する他ないと思います.listは11行目の変数を指すことになるので脳内補完してください.
    説明するまでもないが念の為に補足しておくと,空のリストがあることとnullであることは全く違いますので以下略.

この問題に限らず、よくわからないならまずは動かしてみれば?
実際に動かせば、「動かない」という誤解もその時点で解けるし、listはオブジェクトであり何も渡していないなんていうことはない、ということも理解できると思うよ。

実際にコードを書くことなく、ただただ問題集を丸暗記してその資格を取ることに意味がある?
目指すべきは「Javaを書けるようになること」じゃないの?

引数の(list)に何も渡していないので、動かないが、何かを渡した時に、どう動くかを問われている

この問題の問いたい内容は変数a2とb1は同様に new B() してるけど、異なる挙動を示す、という点だと思うよ。

0Like

Your answer might help someone💌