Я создаю часть программного обеспечения как часть оцениваемого задания. В программе есть родительский класс Пользователь , с тремя дочерними классами Сотрудник , ShopOwner и Клиент .
public class UserList {
ArrayList<User>Users;
public UserList(){
Users=new ArrayList<>();
}
Когда программа запускается, объекты создаются и добавляются в UserList , ArrayList, который должен содержать User объекты, включая его дочерние классы:
public void loadFromFile() throws FileNotFoundException, IOException{
FileReader reader;
reader = new FileReader(filename);
BufferedReader bin = new BufferedReader(reader);
String record = new String();
while ((record = bin.readLine())!=null)
{
String Name = bin.readLine();
String Password = bin.readLine();
String Role = bin.readLine();
switch (Role){
case "Customer":
Customer customer = new Customer();
customer.edit(Name, Password, Role);
add(customer);
break;
case "Employee":
Employee employee = new Employee();
employee.edit(Name, Password, Role);
add(employee);
break;
case "ShopOwner":
ShopOwner shopOwner = new ShopOwner();
shopOwner.edit(Name, Password, Role);
add(shopOwner);
break;
}
}
bin.close();
bin =null;
}
метод добавления выглядит следующим образом:
public void add(User src) throws IOException{
Users.add (src);
}
В этот момент я ожидаю, что Users , ArrayList типа Пользователь может содержать экземпляры всех трех дочерних классов.
В моем основном методе мне нужно инициализировать объект для доступа к методам дочернего класса Customer , здесь все становится сложнее, у меня есть следующий объект customer:
aCustomer = new Customer();
Затем я пытаюсь присвоить ему значения, используя метод из класса UserList:
aCustomer = theUserList.logIn(name,password,role);
метод входа в систему выглядит следующим образом:
public User logIn(String strname, String strpassword, String strrole){
User currentUser = null;
for( User aUser:this.Users)
if(strname.equalsIgnoreCase(aUser.getName())&&
strpassword.equalsIgnoreCase(aUser.getPassword())&&
strrole.equalsIgnoreCase(aUser.getRole())){
currentUser=aUser;
}
return currentUser;
}
Я понимаю, что он возвращает Пользователь объект, тогда как запрос заключается в создании экземпляра объекта Клиент , однако я запутался, что метод logIn сканирует через Пользователи , который должен содержать все три типа объектов, согласно методу loadFromFile ().
Ошибка следующая:
Мне нужен доступ к объекту customer в основном методе. Не уверен, что часть пути не так, поэтому все было скопировано, поэтому извиняюсь за длинный вопрос. Любая помощь, указывающая на изменение, необходимое для доступа к объекту customer из ArrayList, содержащего несколько типов объектов, очень ценится.
Я новичок в Java, поэтому извиняюсь, если это вопрос новичка, пожалуйста, сообщите мне, как изменить вопрос, если это необходимо, вместо того, чтобы закрывать его, так как этот проект действительно важен, и мне действительно нужна помощь .
РЕДАКТИРОВАТЬ *
Для решения этой проблемы использовался downcasting, и ошибка несовместимого типа исчезла, но объект все еще не обращается к методу заказчика getBasket ().
User aCustomer = new Customer();
aCustomer = theUserList.logIn(name,password,role);
aCustomer.getBasket();