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

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

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

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

Q&A

解決済

2回答

3863閲覧

抽象クラスの配列を作りたいです

karakaru

総合スコア1

Java

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

0グッド

0クリップ

投稿2020/06/18 09:46

編集2020/06/18 11:55

前提・実現したいこと

Javaを勉強中の者です。
testクラスで抽象クラスのCryingAnimalの配列を作り、継承クラスのCat, Horseのインスタンスを代入しようとすると、以下のエラーメッセージが発生しました。

どうすればエラーがなくなるでしょうか?
型の問題かと思いましたが、void型以外を入れるとエラーが増えるばかりで……。
お助けください。

発生している問題・エラーメッセージ

/**testクラス/ tora を変数に解決できません Alex を変数に解決できません /**Catクラス/ ローカル変数 tora の値は使用されていません /**Horseクラス/ ローカル変数 Alex の値は使用されていません

/

該当のソースコード

Java

1/** 2 * testクラス 3 */ 4 5public class test { 6/** 7 * メインメソッド。 8 * @param args コマンドライン引数 9 */ 10 public static void main(String[] args) { 11 12//CryingAnimalの配列を作り、継承クラスのCat, Horse, のインスタンスを代入 13 CryingAnimal[]C =new CryingAnimal[1]; 14 15   C[0]=tora.cry; 16   C[1]=Alex.cry; 17 } 18} 19 20/** 21 * 抽象クラス CryingAnimal 22 */ 23abstract class CryingAnimal { 24 25 //抽象メソッドを宣言 26 abstract void cry(); 27 28} 29** 30 * CryingAnimalを継承したCatクラス 31 */ 32class Cat extends CryingAnimal { 33 34 void cry(){ 35 36 System.out.println("ニャーニャー"); 37 Cat tora=new Cat(); 38} 39} 40 41** 42 * CryingAnimalを継承したHorseクラス 43 */ 44public class Horse extends CryingAnimal { 45 46 void cry(){ 47 System.out.println("ヒヒーン"); 48 } 49 Horse Alex =new Horse(); 50} 51

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

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

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

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

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

miyabi_takatsuk

2020/06/18 09:48

Javaの質問タグをつけると、回答つきやすくなると思いますよ。
karakaru

2020/06/18 09:50

うっかりしてました。 ありがとうございます!
anndonut

2020/06/18 10:30

「文字コード」「多次元配列」「バージョン管理」のタグは削除願います。
guest

回答2

0

ベストアンサー

なるべく元のソースを残して動くように修正してみました。

意識しないといけないのは変数のscope
tora、Alexは、testのMainから見えません。

抽象クラスの配列宣言時は、添え字の最大を指定するのでなく要素数を指定する
C[0]、C[1]にアクセスしたいなら要素は2個

tora?Alex?にあたるインスタンスを実際に生成する(配列宣言だけでは中身はnull)

Horseクラスのフィールドに、Horse Alex = new Horse();を定義しない。
インスタンスを生成するたびにインスタンスを生成・・・と、循環します。
staticにすると、1つしかインスタンスを作りません。が、そもそも不要だと思えるので削除

コメントアウトした部分を変更し実行してエラーを確認すると理解が深まるかもしれません。

java

1/** 2 * testクラス 3 */ 4public class test { 5 /** 6 * メインメソッド。 7 * @param args コマンドライン引数 8 */ 9 public static void main(String[] args) { 10 11 //CryingAnimalの配列を作り、継承クラスのCat, Horse, のインスタンスを代入 12 //CryingAnimal[] C = new CryingAnimal[1]; 13 CryingAnimal[] C = new CryingAnimal[2]; 14 15 C[0] = new Cat(); 16 C[1] = new Horse(); 17 18 C[0].cry(); // tora.cry; 19 C[1].cry(); // Alex.cry; 20 } 21} 22 23/** 24 * 抽象クラス CryingAnimal 25 */ 26abstract class CryingAnimal { 27 //抽象メソッドを宣言 28 abstract void cry(); 29} 30 31/** 32 * CryingAnimalを継承したCatクラス 33 */ 34class Cat extends CryingAnimal { 35 void cry() { 36 System.out.println("ニャーニャー"); 37 Cat tora = new Cat(); 38 } 39} 40 41/** 42 * CryingAnimalを継承したHorseクラス 43 */ 44class Horse extends CryingAnimal { 45 void cry() { 46 System.out.println("ヒヒーン"); 47 } 48// Horse Alex = new Horse(); 49}

投稿2020/06/18 10:20

編集2020/06/18 10:42
momon-ga

総合スコア4826

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

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

anndonut

2020/06/18 10:50

paiza.ioだと、クラス毎にファイル分けしないとエラー、mainメソッドはMainクラスに置かないとエラーになるので助かりました。(自分も同じことをやってみたのですがローカルにJavaをインストールしていないのでどうしようもなかったという…)
karakaru

2020/06/18 23:52

ありがとうございました!
guest

0

tora を変数に解決できません

Alex を変数に解決できません

エラーメッセージのとおりです。mainの中やtestクラスのstaticフィールドの中にこれらの変数がないので、参照できません。

投稿2020/06/18 10:00

maisumakun

総合スコア146018

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問