質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

Q&A

2回答

1076閲覧

Javaの問題です。継承の問題です。出力結果が1025になる理由が分かりません。

enamel22

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

継承

継承(インヘリタンス)はオブジェクト指向プログラミングに存在するシステムです。継承はオブジェクトが各自定義する必要をなくし、継承元のオブジェクトで定義されている内容を引き継ぎます。

0グッド

1クリップ

投稿2023/04/28 04:11

編集2023/04/28 05:19

実現したいこと

この問題を解くときの順序の理解が曖昧なのですが、私の解釈といたしまして、まず初めの

「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になるのか、わかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2023/04/28 04:18 編集

>1025が出力されるのはどうして と聞かれてもあなたがそう出力するプログラムを書いたからとしか。
enamel22

2023/04/28 04:25

練習問題を解いてる時に見つけた問題です。解けなかったため質問いたしました。
maisumakun

2023/04/28 04:25

> また、そこからどうして1025になるのか、わかりません。 どうなると考えたのですか?
enamel22

2023/04/28 04:42 編集

拙い知識で間違っている解釈もありますが、こう考えました。 ・「return num * 2;」の「*」は2条する意味の掛け算だろうなと認識 ・「*整数」は「何かと整数を掛ける」という発想ではなく、「指定された整数を2条する」という考えでした。(間違いでした) これらの間違った知識からintのnumは4である前提で問題を解いていました。 結果、 「return num * num;」の部分でまた掛け算が行われているため、「4×5×5」というよく分からない認識になっていました。 また、「sc = new SampleB()」や「SampleC sc = new SampleA();」の「sc」の値を見つけられず、 「(sc.calc(5))」の中に「sc」があるので、何となく「sc=5」という認識でしたが、合っていますでしょうか。
Zuishin

2023/04/28 06:22 編集

> ・「return num * 2;」の「*」は2条する意味の掛け算だろうなと認識 > 結果、 「return num * num;」の部分でまた掛け算が行われているため、「4×5×5」というよく分からない認識になっていました。 ふざけてるわけではないとしたら、何か別の道を探す方がいいと思います。 自分で自分の長所はみつけにくいと思うので、周囲の人に進路相談するのが良いと思います。
enamel22

2023/04/28 06:28 編集

Javaを初めて1か月ですので、まだ分からないことのほうが多いです。この時点でもう別の進路を見つけたほうがいいとは思いません。全く違う理解をしていることがあることは私が一番理解しております。その間違いを正すために、この質問を通じて学んでいます。
maisumakun

2023/04/28 06:31

どのような学習法を取られているのでしょうか?
enamel22

2023/04/28 06:50

スッキリわかるJava入門という参考書を軸に勉強しています。研修先のスクールにて、既に例外まで学び終えました。現在は主にスクールで展開されている講義動画を視聴し、例えば「newする」とはどういうことなのか等を簡潔に紙にメモしています。それに加え、スクールで展開されている練習問題をEclipseで解いています。しかし、関数の理解が乏しいという指摘の通り、「何が何を指しているのか」という初歩がまだ理解できていない状態なので、多態性の問題を解くこと自体まだ早いと思います。この場合、クラスやインスタンスといった一字一句の理解からしていきたいのですが、一字一句の意味とコードの文法を上手に結びつかせる勉強法が未だに分かっていません。上手な勉強法があれば教えていただきたい所存でございます。
maisumakun

2023/04/28 07:17

スクールに通っているとのことでしたら、そのスクールで質問をすることが第一選択となりそうな気がするのですが、こちらへ質問された事情はどのようなものでしょうか?
enamel22

2023/04/28 07:49 編集

仰る通りです。teratailで質問を投げて文章で答えを見たかったということもありますが、まずはスクールの講師に質問します。
Zuishin

2023/04/28 08:55

全く違う理解をしているからではなく、その理解をした過程に改善の極めて困難な致命的な要素があるために、学習に人の数百倍の時間がかかることが予想されたからお勧めしたわけですが、非効率な道を歩むことが必ずしも悪いわけではないので、熱意があるならば頑張って茨の道を歩み、何か大事なものを手に入れてください。
guest

回答2

0

改行せずに 10(5*2) と 25(5*5) を print してる。

投稿2023/04/28 04:20

編集2023/04/28 06:42
episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1 SampleC sc = new SampleA(); 2 System.out.print(sc.calc(5));

ここでは SampleA#calc() が呼ばれるので、5 * 2 の 10 が表示されます。println() ではなく print() なので、改行はされません。

java

1 sc = new SampleB(); 2 System.out.print(sc.calc(5));

ここでは SampleB#calc() が呼ばれるので、5*5 の 25 が表示されます。

投稿2023/04/28 04:18

int32_t

総合スコア20841

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enamel22

2023/04/28 05:19

とても丁寧な回答をありがとうございます。 この問題を解くときの順序の理解が曖昧なのですが、私の解釈といたしまして、まず初めの 「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);」 の役割が分からないのですが、どこに関係するソースでしょうか? 長々と申し訳ありません。
int32_t

2023/04/28 05:30

あまりにも間違った理解が多くて指摘しきれません。とくに「関数とはなにか」の理解が怪しいです。Javaの入門書を読み直してください。
maisumakun

2023/04/28 05:55 編集

> 「sc=new SampleB」のように初めの「Sample○○」のがないのはどうしてでしょうか? コードをパターンとして認識するのではなく、一字一句の意味を着実に把握していってください。 (ここ以外にも、まず「コードをJavaの文法として解釈する」ことができていない状態です)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問