Вы на правильном пути, но я верю, что у вас есть ошибки.Я предполагаю, что код, который вы разместили, немного отличается от кода, который выдает ошибку (я проверял и не получил ошибку)
Здесь вы получаете 2 ввода от пользователя,Я полагаю, что вы хотели получить только 1.
userInput = sc.nextInt();
switch (sc.nextInt())
Кроме того, userInput
должно иметь тип int
, а не double.
У вас есть класс собаки, но нет класса кошка / утка
Похоже, вы пытаетесь использовать фабричный шаблон, но я неНа 100% уверен.Вы можете создать класс AnimalFactory
, если это так.В противном случае класс «Животное» сбивает с толку.Я предполагаю, что вы не используете Factory Pattern.
Вы заметите несколько вещей:
Я переопределяю метод toString()
из Object.System.out.println
вызовет метод toString()
.
Кошка, утка и собака все простираются от Animal
, поэтому ваш Animal animalSelected
может относиться к любому из этих типов!
Животное имеет2 абстрактных метода.Эти методы должны быть переопределены в любых подклассах (Cat, Dog, Duck).Имея объявленные методы Means, мы можем использовать методы внутри класса Animal.Это также позволяет нам вызывать методы для любых животных.
Например, вы можете использовать animalSelected.getAnimalSound()
, хотя Animal не определяет тело этого метода.
import java.util.Scanner;
public class VirtualZoo
{
public static void main(String[] args)
{
// Options
final int catType = 0,
dogType = 1,
duckType = 2,
exit = -1;
// create Scanner
Scanner input;
input = new Scanner(System.in);
int userInput;
System.out.println("Welcome to the Zoo");
System.out.println("Pick select an animal to visit");
System.out.println("=================================");
System.out.println("===========MAIN MENU=============");
System.out.println("=================================");
System.out.println("== " + catType + ") Cat ===================");
System.out.println("== " + dogType + ") Dog ===================");
System.out.println("== " + duckType + ") Duck ===================");
System.out.println("== " + exit + ") EXIT ===================");
System.out.println("=================================");
System.out.println();
System.out.println();
System.out.println( "Input : ");
Scanner sc = new Scanner(System.in);
userInput = sc.nextInt();
Animal animalSelected = null;
switch (userInput)
{
case catType:
animalSelected = new Cat();
break;
case dogType:
animalSelected = new Dog();
break;
case 2:
animalSelected = new Duck();
break;
case -1:
System.out.println("Your name is short length.");
break;
default:
break;
}
if (animalSelected != null)
{
System.out.println(animalSelected);
}
}
}
public abstract class Animal
{
public abstract String getAnimalSound();
public abstract String getAnimalType();
@Override
public String toString()
{
return "The " + getAnimalType() + " says " + getAnimalSound();
}
}
public class Duck extends Animal
{
@Override
public String getAnimalSound()
{
return "quacks";
}
@Override
public String getAnimalType()
{
return "Duck";
}
}
public class Cat extends Animal
{
@Override
public String getAnimalSound()
{
return "meows";
}
@Override
public String getAnimalType()
{
return "Cat";
}
}
public class Dog extends Animal
{
@Override
public String getAnimalSound()
{
return "barks";
}
@Override
public String getAnimalType()
{
return "Dog";
}
}