Почему я не могу обратиться к полю обьекта. который получил из ApplicationContext?
Разбираюсь со Spring-ом, и столкнулся с непонятной для меня ситуацией. Создал
abstract public class Animal {
String name;
}
@Component
public class Dog extends Animal{
public String name;
public Dog() {}
@Override
public String toString() {
return "Im a Dog";
}
}
@Component
public class Cat extends Animal {
public String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Im a Cat";
}
}
public class Application {
public static void main(String[] args) {
ApplicationContext appContext = new AnnotationConfigApplicationContext(AppConfig.class);
Animal dogBean = appContext.getBean(Dog.class);
Animal catBean = appContext.getBean(Cat.class);
System.out.println(dogBean);//провека
System.out.println(catBean);
catBean. (и вот тут я не имею доступа к полю "name" и public пробовал и set и get)
dogBean. (пробовал и с пустым конструктором никак не могу обратиться к полю. а метод toString вполне работает и выводит)
}
}
Подскажите пожалуйста а как мне работать с состоянием объекта, если я получаю его из контекста?
Ответы (1 шт):
Автор решения: Alexandr Ivanov
→ Ссылка
Spring тут не при чём. Класс Animal не содержит доступного поля name. А переменные dogBean и catBean объявлены как Animal. Поэтому компилятор и IDE не позволяют обращения к полю name, не смотря на то, что в процессе выполнения они будут указывать на объекты, имеющие такие поля.