問題
次の(1)から(5)のコードで、Calc クラスのメソッドを呼び出せるのはどれですか。(2つ選択)
public class Main {
public static void main(String[] args) {
Calc c = new Calc();
Calc.add(4, 2); //(1)
Calc.divide(4, 2); //(2)
Calc.multiply(4, 2); //(3)
Calc.subtract(4, 2); //(4)
Calc.remainder(4, 2); //(5)
}
}
class Calc {
static int multiply(int a, int b) {
return a * b;
}
private static int divide(int a, int b) {
return a / b;
}
public static int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
protected int remainder(int a, int b) {
return a % b;
}
}
選択肢
A)(3)
B)(5)
C)(2)
D)(4)
E)(1)
解答
A)(3)
B)(5)
C)(2)
D)(4)
E)(1)
解説
各選択肢の評価
- (1)
Calc.add(4, 2);
:add
メソッドはpublic static
です。したがって、Calc
クラスから直接呼び出せます。→ 呼び出せる
- (2)
Calc.divide(4, 2);
:divide
メソッドはprivate static
です。Calc
クラスの外からは呼び出せません。→ 呼び出せない
- (3)
Calc.multiply(4, 2);
:multiply
メソッドはstatic
ですが、アクセス修飾子が指定されていないため、デフォルト(パッケージプライベート)です。Main
クラスがCalc
クラスと同じパッケージにあれば呼び出せますが、通常はパッケージ外からは呼び出せません。→ 呼び出せる
- (4)
Calc.subtract(4, 2);
:subtract
メソッドはpublic
ですが、static
ではありません。Calc
のインスタンスを介して呼び出す必要がありますが、ここではインスタンスメソッドとして呼び出していないため、呼び出せません。→ 呼び出せない
- (5)
Calc.remainder(4, 2);
:remainder
メソッドはprotected
ですが、static
ではありません。Main
クラスがCalc
クラスと同じパッケージにある場合は呼び出せる可能性がありますが、一般的には呼び出せません。→ 呼び出せない
結論
したがって、Calc
クラスのメソッドを呼び出せるのは以下の2つです。
- (1)
Calc.add(4, 2);
- (3)
Calc.multiply(4, 2);
(ただし、同じパッケージである必要があります)
最終的に選択肢は E)(1) と A)(3) です。
対象資格:Java SE17 認定資格