Tips

Java Silver 練習問題22

Java Silver 練習問題22

Java Silverに関する問題を出題していきます!

問題1
次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] public class Sample {
public static void main(String[] args) {
SubSample obj = new SubSample();
int sum = obj.x + obj.y;
System.out.println(sum);
}
}

class SuperSample {
int x = 10;
}

class SubSample extends SuperSample {
int y = 20;
}
[/java]

  1. 「20」と表示
  2. 「30」と表示
  3. 何も表示されない
  4. コンパイルエラー
  5. 実行時エラー
解答はここをクリック!

【解答 2:「30」と表示】

3行目でSubSampleをインスタンス化しています。
SubSampleクラスはSuperSampleクラスを継承しているため、objからxを呼び出すことも可能です。

 

 

問題2

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] public class Sample {
public static void main(String[] args) {
SubSample obj = new SubSample();
System.out.println(obj.str);
}
}

class SuperSample {
String str = "スーパー";
}

class SubSample extends SuperSample {
String str = "サブ";
}
[/java]

  1. 「スーパー」と表示
  2. 「サブ」と表示
  3. 何も表示されない
  4. コンパイルエラー
  5. 実行時エラー
解答はここをクリック!

【解答 2:「サブ」と表示】
スーパークラスにもサブクラスにもstrがあります。
この場合、サブクラスのオブジェクトからstrを呼び出すと、サブクラスで定義された値になります。

 

 

問題3

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] public class Sample {
public static void main(String[] args) {
SubSample obj = new SubSample();
int sum = obj.x + obj.y;
System.out.println(sum);
}
}

class SuperSample {
int x = 10;
}

class SubSample extends SuperSample {
int y = 20;
x = 30;
}
[/java]

  1. 「30」と表示
  2. 「50」と表示
  3. 何も表示されない
  4. コンパイルエラー
  5. 実行時エラー
解答はここをクリック!

【解答 4:コンパイルエラー】
15行目でxに再代入しようとしていますが、これはできません。
xが継承されるのはインスタンス化時なので、クラス定義の段階で変更することはできません。

 

 

問題4

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] public class Sample {
public static void main(String[] args) {
SubSample obj = new SubSample();
System.out.println(obj.a);
}
}

class SuperSample {
int a = 10;
}

class SubSample extends SuperSample {
static int a = 20;
}
[/java]

  1. 「10」と表示
  2. 「20」と表示
  3. 何も表示されない
  4. コンパイルエラー
  5. 実行時エラー
解答はここをクリック!

【解答 2:「20」と表示】
objという参照変数からaを呼び出していますが、static変数であるサブクラス側のaが呼び出されます。
参照変数からstaticを呼び出すことはできますが、推奨されていません。

 

 

問題5

次のプログラムをコンパイル、実行した結果として正しいものはどれか。

[java] public class Sample {
public static void main(String[] args) {
System.out.println(SubSample.a);
}
}

class SuperSample {
static int a = 10;
}

class SubSample extends SuperSample {
static int b = 20;
}
[/java]

  1. 「10」と表示
  2. 「20」と表示
  3. 何も表示されない
  4. コンパイルエラー
  5. 実行時エラー
解答はここをクリック!

【解答 1:「10」と表示される】
サブクラスからスーパークラスのstatic変数を呼び出しています。
これはコンパイルエラーにはなりません。


前回の問題   次の問題

新連載はじまりました!新Java基礎 連載リンク

はじめてのJAVA 連載

Recent News

Recent Tips

Tag Search