Почему не могу вызвать метод с класса в другой
Почему не могу вызвать метод с класса Veterinarian в Main подскажите пожалуйста
package animal;
public class Main {
public static void main(String[] args) {
Animal dog = new Dog("Barry", "Allabai",3,"Meat","Ukraine 1");
Animal cat = new Cat("Murzik","Persian cat", 2,"Corm","Ukraine 2");
Animal horse = new Horse("Shalun","Arabian", 120,"Ovos","Ukraine 3");
Animal[] animals = {dog, cat, horse};
for (Animal animal:animals) {
System.out.println(animal.threatAnimal(animals));
}
}
}
и класс ветеринар
package animal;
public class Veterinarian {
public void threatAnimal(Animal animal) {
System.out.println(animal.getFood() + animal.getLocation());
}
}
Ответы (1 шт):
Во-первых:
threatAnimal находится в другом классе.
Во-вторых:
метод main() статический, а метод threatAnimal(), который вы хотите вызвать нет.
Как разрешить ситуацию
способ №1
Ничего не меняете в ветеринаре, а просто создаете один объект ветеринара, на котором вы уже сможете вызывать данный метод
public class Main {
public static void main(String[] args) {
// создаем объект ветеринара
Veterinarian veterinarian = new Veterinarian();
Animal dog = new Dog("Barry", "Allabai",3,"Meat","Ukraine 1");
Animal cat = new Cat("Murzik","Persian cat", 2,"Corm","Ukraine 2");
Animal horse = new Horse("Shalun","Arabian", 120,"Ovos","Ukraine 3");
Animal[] animals = {dog, cat, horse};
for (Animal animal:animals) {
// вызываем метод
veterinarian.threatAnimal(animal);
}
}
}
способ №2
Объявляем метод threatAnimal() статическим
package animal;
public class Veterinarian {
// добавили ключевое слово static
public static void threatAnimal(Animal animal) {
System.out.println(animal.getFood() + animal.getLocation());
}
}
в данном случае объект ветеринара можно не создавать (хотя с точки зрения БЛ это странно)
public class Main {
public static void main(String[] args) {
Animal dog = new Dog("Barry", "Allabai",3,"Meat","Ukraine 1");
Animal cat = new Cat("Murzik","Persian cat", 2,"Corm","Ukraine 2");
Animal horse = new Horse("Shalun","Arabian", 120,"Ovos","Ukraine 3");
Animal[] animals = {dog, cat, horse};
for (Animal animal:animals) {
// вызываем метод указывая при этом имя класса в котором он находится
Veterinarian.threatAnimal(animal);
}
}
}
способ №3
Переносим метод в класс Main
При этом метод также должен быть статическим, т.к. у вы его вызываете не на экземпляре класса Main
public class Main {
public static void main(String[] args) {
Animal dog = new Dog("Barry", "Allabai",3,"Meat","Ukraine 1");
Animal cat = new Cat("Murzik","Persian cat", 2,"Corm","Ukraine 2");
Animal horse = new Horse("Shalun","Arabian", 120,"Ovos","Ukraine 3");
Animal[] animals = {dog, cat, horse};
for (Animal animal:animals) {
// вызываем метод
threatAnimal(animal);
}
}
// добавили ключевое слово static
public static void threatAnimal(Animal animal) {
System.out.println(animal.getFood() + animal.getLocation());
}
}
Замечание:
Я привел 3 способа преодолеть технические ограничения и вызвать нужный вам метод, но с точки зрения ООП и бизнес логики приложения предпочтительнее использовать первый способ.