Я пытаюсь (изучение, как), чтобы воспользоваться преимуществами создания абстрактного класса, а затем подклассы и т.д. У меня есть суперкласс Person:Нужна помощь, чтобы понять, понижающее приведение в Java
public abstract class Person {
private String name;
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
и подклассы, для пример:
public class Man extends Person{
private String occupation;
public void setOccupation(String occupation) {
this.occupation = occupation;
}
public String getOccupation() {
return occupation;
}
@Override
public void setType(String type) {
super.setType(type);
}
@Override
public String getType() {
return super.getType();
}
@Override
public void setName(String name) {
super.setName(name);
}
@Override
public String getName() {
return super.getName();
}
}
и подросток:
public class Teenager extends Person{
private String stdyPlace;
public String getStdyPlace() {
return stdyPlace;
}
public void setStdyPlace(String stdyPlace) {
this.stdyPlace = stdyPlace;
}
@Override
public void setType(String type) {
super.setType(type);
}
@Override
public String getType() {
return super.getType();
}
@Override
public void setName(String name) {
super.setName(name);
}
@Override
public String getName() {
return super.getName();
}
Итак, в дальнейшем я хочу делать разные действия, зависит от типа объекта. Я хотел чего-л, как:
Person pM;
switch (typeOfPerson){
case "Man": pM=new Man(); pM.setOccupation("military"); ...other acts that regards this type of object...; break; //doesn't work
case "Student": pM=new Teenager(); pM.setStdyPlace("Boston"); ...other acts that regards this type of object...; break; //doesn't work too
}
pM.setName(en);
pM.setType(tp);
Но проблема в том, рм ведут себя как Человек только. Я не могу узнать, как отбросить его на тип, который я хочу. Вопрос: как его бросить?
Почему вы переопределяете геттеры и сеттеры 'name' и' type', если все, что вы делаете, это вызов 'super'? Знаете, они унаследованы. – Andreas
Потому что я не знал, что не должен этого делать. Теперь я знаю - это бессмысленно. –
Я считаю, что лучше (или, по крайней мере, больше [OO] (https://en.wikipedia.org/wiki/Object-oriented_programming)) способ сделать то, что вы хотите сделать, это использовать [полиморфизм] (https : //docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html) вместо использования 'switch' и' instanceof' ([узнайте, почему] (https://www.google.pl/search? д = полиморфизм + против + если + еще и то есть = UTF-8 & ае = UTF-8 & gws_rd = сг & е = Nc4nV9CZCYPIsQGQ2pfgDA # д = полиморфизм + против + условными)). – TeWu