実現したいこと
この問題を解くときの順序の理解が曖昧なのですが、私の解釈といたしまして、まず初めの
「public class SampleA extends SampleC{
int calc(int num) {
return num * 2;」
を飛ばして、
「SampleC sc = new SampleA();
System.out.print(sc.calc(5));」
に飛び、「(sc.calc(5))」の「(5)」が「SampleA()」の「()」に呼ばれているので「()」の値は「5」になる。
この順序で合っていますでしょうか?
また、「 SampleC sc = new SampleA();」で「SampleA()」が呼ばれて「(sc.calc(5));」の「5」が呼ばれる経緯が分かりません。「SampleC sc」はこのソースではどういう役目を補っているのでしょうか?
上記の流れの後、初めの「return num * 2;」に戻り、「int calc(int num) 」の「(int num) 」が「5」なので「* 2」をして「10」が出力される。
ここで、
「 sc = new SampleB(); System.out.print(sc.calc(5));」
までいかず、最初に「10」を出力する経緯も分かりません。
この後、上記と同じように「SampleB()」の「()]
に「(sc.calc(5));」の「(5)」が呼ばれますが、「sc=new SampleB」のように初めの「Sample○○」のがないのはどうしてでしょうか?
またそこから
「public class SampleB extends SampleC{
int calc(int num) {
return num * num;」
に飛んで「return num * num」をしますが、どの段階でreturnしたんでしょうか?
また、
「public abstract class SampleC {
abstract int calc(int num);」
の役割が分からないのですが、どこに関係するソースでしょうか?
長々と申し訳ありません。
該当のソースコード
public class SampleA extends SampleC{ int calc(int num) { return num * 2; } public static void main(String[] args) { SampleC sc = new SampleA(); System.out.print(sc.calc(5)); sc = new SampleB(); System.out.print(sc.calc(5)); } } public class SampleB extends SampleC{ int calc(int num) { return num * num; } } public abstract class SampleC { abstract int calc(int num); }
試したこと
SampleAがSampleCを継承していること、SampleBがSampleCを継承していることは分かりました。int calc(int num)に何の値が入るのか分からずじまいです。また、そこからどうして1025になるのか、わかりません。
