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

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

新規登録して質問してみよう
ただいま回答率
85.35%
変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Java

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

Q&A

解決済

3回答

1195閲覧

変数の型について教えてください

hashiya848

総合スコア1

変数

変数は、プログラミングにおいて値や文字列などのデータを保持できる仕組みを指します。自由に名前を付けることができるため、管理しやすくなるのが特徴です。プログラムで変数の宣言を行い、値を代入して利用。保持したデータが通用する範囲でローカル変数とグローバル変数に分けられます。

Java

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

0グッド

0クリップ

投稿2021/04/21 05:09

初めまして、初めてこのサイトを利用して質問させていただきます。

私はJavaの勉強を独学でしています。
入門書を読み終えたので、プログラムの理解を深めるために、
基本情報のJavaの過去問を見ながら自分でエディターに書き写していたのですが、まだ私には難しく感じました。

そこで、下記サイトのコードを見ながら模写をしているのですが、2箇所分からないところがあります。
https://eng-entrance.com/what-oop(ページの下の方にコードがあります)

1つ目:「Human.java」の11行目

public Human(){} こちらが、コンストラクタということは理解しています。 ・インスタンス生成のときに、初期動作として実行される。 ・サブクラスのコンストラクタ実行の前に、スーパークラスのコンストラクタが実行される。 というのは分かるのですが、こちらは引数も処理もありません。 これは記述する意味があるのでしょうか?

###2つ目:「Yuusya.java」の13行目

public void specialAttack(Human target){//中略//} Human targetが分かりません。 specialAttackというメソッドの引数として、Human targetがあるというのは分かります。 例えばint numberが、int型のnumberという変数であるというのと同様に、 targetは変数の名前であり、Humanがその変数の型だと思うのですが、これはどういう意味なのでしょうか? ・スーパークラスを変数の型として使っているということなのでしょうか? ・targetという変数は、サブクラスでもスーパークラスでもmain.javaでも宣言がされていませんが、いいのでしょうか? 2時間ほどずっと調べたのですが、分かりませんでした。 「Human target」についての意味や目的など、お教えいただけると嬉しいです。 もし面倒であれば、ヒントが載っていそうなURLを貼り付けてくれるだけでも構いません。 よろしくお願い致します。

もしお時間あれば教えてください

模写をしながら、コードの理解を深めたいと思っています。
基本情報のJavaより少し難易度が低いくらいのコードをご存知であれば、URLなど貼っていただけると嬉しいです。

もしくは、現在の私のレベル感でのおすすめな学習法などあれば......。
よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

こちらは引数も処理もありません。

これは記述する意味があるのでしょうか?

それは本来設計時に意味をもたせておくことなので既に書かれたものに対して「意味があるのか」と問うのは無粋です。
意味があるから定義されているわけです。

結構ありますよ。
最上位のクラスは中身無しで定義して、子や孫に実装を任せることって。
ただ要件次第なので、全体の情報や関連性を整理し、どう役割分担させていくかを考えた上で作っていく必要があります。
「とりあえず定義しとけ」はあり得ません。
コードを書くときには役割は一通り決まっているべきです。

targetは変数の名前であり、Humanがその変数の型だと思うのですが、これはどういう意味なのでしょうか?

ご理解のとおりです。
変数名は任意につけられるのでどういう意味でもなく、Humanという型の変数です。別にaでもbでも良いのです。
命名的には読んで役割がわかるもののほうが望ましいですがね。

・targetという変数は、サブクラスでもスーパークラスでもmain.javaでも宣言がされていませんが、いいのでしょうか?

メソッドの引数なので定義、宣言されたものが渡されてきます。受け取る側での宣言は不要。
型であるHumanクラスは参照されている必要があります(同じパッケージになければ要import)

模写をしながら、コードの理解を深めたいと思っています。

基本情報のJavaより少し難易度が低いくらいのコードをご存知であれば、URLなど貼っていただけると嬉しいです。

個人的には模写にはあまり良い効果があるとは思っていません。
何を目指しているかによりますが、基本情報通りたいだけなら別にJavaを個別に覚える必要もないでしょう。

JavaをやりたいのならJava Bronzeあたりからターゲットにしてはどうでしょうか(できればSilver)。
考える力を養うにはとにかくたくさんコードを書く必要がありますが、
それは模写ではなく、自分で作りたいものや目的を決めて自分で設計して自分で作るコードであるべきと考えます。
プログラムは学校の試験と違って確固たる答えがありません。
1つのゴールに向かうための道は沢山あります。
考えることが7割をしめます。
模写ではおそらく半分も考えません。
「参考書通りに書いたけど動かない」という質問が横行していることが証拠です。
結局は人が考えた人のコードなので柔軟性や発想力も育ちにくいと思います。
コードに意図も意味もない感じになりやすい。

理解力を試したいならteratailなどで回答をしてみるのも1つの手です。

投稿2021/04/21 05:20

編集2021/04/21 05:28
m.ts10806

総合スコア80875

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

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

K_3578

2021/04/21 06:26

>個人的には模写にはあまり良い効果があるとは思っていません。 ここに共感したので高評価。
guest

0

もっと簡単なコードで、いろいろ実験してみるのが早いです。

java

1public static void main(String[] args) { 2 int x = 10; 3 printDouble(x); 4} 5 6public static void printDouble(int a) { 7 System.out.println(a * 2); 8}

まずは上記コードのx = 1010の部分をいろいろな数値に変えてみましょう。
引数とかの役割がもう少し見えてきますよ。

投稿2021/04/21 05:26

swordone

総合スコア20669

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

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

0

ベストアンサー

1つ目

コンストラクタを1つも作成していない場合、
コンパイル時にデフォルトコンストラクタが自動的に作成されます。
よって今回のケースで言えばわざわざ作成する必要はありません。
(書いても問題ないです)

2つ目

勇者クラスにはspecialAttackというメソッドが実装されています。
public void specialAttack(Human target) を見ると
メソッドの引数にはHumanクラスの情報が引き渡され、メソッド内ではtargetと言う名前で定義されます。
ですが、mainを見ると引き渡されるクラスはLastBossクラスが引き渡されています。

main

1LastBoss lastBoss = new LastBoss(); 2...(略)... 3yuusya.specialAttack(lastBoss);

単純に考えると specialAttack(LastBoss target) では?となるかもしれませんが
Javaにはアップキャストという仕組みがあります。

LastBossクラスはHumanクラスを継承したクラスになっています。
つまりLastBossクラスはHumanクラスとして振る舞う事が保証されるわけです。

Java アップキャストで検索すると色々と情報が出てくると思います。

投稿2021/04/21 05:43

Luice

総合スコア771

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

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

hashiya848

2021/04/22 06:43

Luiceさん、回答ありがとうございました! メソッドの引数としてクラスの情報を渡すことができるのですね!謎が溶けました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問