2つのサブクラスから値を取得するのに問題があります。 他の2つのクラスからメインプログラムに値を返すにはどうすればよいですか?クラスには階層があり、Cat.javaにはAnimal.Javaが継承されています。私はAnimalクラスから値を取得できますが、拡張Catクラスからは値を取得できません。私は間違って何をしていますか?クラス上での値の拡張と戻り
メインプログラム
import java.util.*;
public class animalProject {
private static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Welcome to create your very own animal.");
System.out.println("Start by typing a name for your animal: ");
String name = input.next();
Animal newAnimal = new Animal(name, 0);
System.out.println("New Animal created");
System.out.println("Set state of your animal: [1] Alive. [2] Dead. ");
int status = input.nextInt();
newAnimal.animalState(status);
System.out.println("Print name of your animal? [1] Yes [2] No ");
int answer = input.nextInt();
if (answer == 1) {
newAnimal.getName();
}
System.out.println("Check status of your animal? [1] Yes [2] No");
answer = input.nextInt();
if (answer == 1) {
newAnimal.checkState();
}
System.out.println("Set lifes for your cat: ");
int life = input.nextInt();
// set lifes to lifesBefore(). in Cat.Java
System.out.println("Remove lifes from cat?: [1] Yes [2] No");
while (true) {
life = input.nextInt(); {
// call the method to decrease lifes from Cat.Java
}
if (life == 2){
break;
}
}
System.out.println("Check cats lifes? [1] Yes [2] No");
answer = input.nextInt();
if (answer == 1) {
// return lifes from Cat.java
}
Animal.Java
public class Animal{
protected String name;
protected int status;
public Animal(String animalName, int animalStatus){
name = amimalName;
state = animalStatus;
}
public void getName() {
System.out.println(name);
}
public void setName() {
this.name = name;
}
public void animalState(int status) {
if (status == 1) {
state = 1; // dead
}
else if (status == 2) {
state = 2; // alive
}
else {
System.out.println("Error with setting state.. program closing..");
System.exit(1);
}
}
public void checkState() {
if (state == 1) {
System.out.println("Animal is dead ");
}
else if (state == 2) {
System.out.println("Animal is alive");
}
else {
System.out.println("Unkown input.. program closing..");
System.exit(1);
}
}
}
Cat.Java
public class Cat extends Animal {
private int catLifes;
public Cat(String animalName int animalStatus, int lifes) {
super(animalName, animalStatus);
catLifes = lifes;
}
public void lifesBefore(){
this.catLifes = lifes;
}
public void decreaseLifes() {
for (int i = 0 ; i < catLifes; i++) {
catLifes--;
}
System.out.println("Cat ran out of lifes and is now dead! ");
// set animals state to dead in Animal.Java
}
public int catsLifesAfter(){
return this.catLifes;
}
}
オブジェクトは「動物型」から作成します。猫が欲しい場合は、このタイプのオブジェクトを作成する必要があります。 'Animal myCat = new Cat(" Kitty "、2,9)' – Blobonat
のようにすることもできます。また、インスタンス化できないようにAnimal abstractを作成することは理にかなっています。次に、これらのメソッドにアクセスできるCatオブジェクトを作成する必要があります。私が言うことができるから、これはあなたがやろうとしていたようですね? – James
親クラス参照は、子クラスオブジェクトを保持するために使用できます。しかし、子クラス固有のメソッドにアクセスするには、それぞれの子クラス – JavaHopper