我有一项功课要做,而且我有一些转发问题。这是我的三个班级。
import java.util.LinkedList;
public class Bank {
LinkedList<Client> ListOfClients = new LinkedList<Client>();
public void addClient(Client arg){
ListOfClients.add(arg);
}
public void getClients(){
for(Client c : ListOfClients)
System.out.printf("Name: %s \nSurname: %s \nSocial Security: %s\n", c.name, c.surname, c.SocialSecurity);
}
}
public class Client {
LinkedList<Account> ListOfAccounts = new LinkedList<Account>();
public void addAccount(Account args){
ListOfAccounts.add(args);
}
public void getAccounts(){
for(Account a : ListOfAccounts)
System.out.printf("Number: %s\nBalance: %f\n", a.nr, a.balance);
}
public class Person extends Client{
protected String name, surname, SocialSecurity;
public Person(){
System.out.println("Type name: ");
name = input_data();
System.out.println("Type surname: ");
surname = input_data();
System.out.println("Type Social Security number: ");
SocialSecurity = input_data();
}
public String input_data(){
Scanner input = new Scanner(System.in);
String data = input.nextLine();
return data;
}
}
问题在于我在Bank类中的getClients方法。它说:&#34; SocialSecurity无法解决或不是一个领域&#34;。与姓名和姓氏字段相同。我知道我可以将这些字符串复制到Client类中,问题将得到解决,但我需要通过向下转换来实现。我读了一些关于RTTI的内容,但仍无法找到解决该问题的方法。
答案 0 :(得分:0)
如果已将人员添加到银行类,您可以尝试将您的客户转回人员:
public void getClients(){
for(Client c : ListOfClients) {
if ( c instanceof Person ) {
Person p = (Person) c;
System.out.printf("Name: %s \nSurname: %s \nSocial Security: %s\n", p.name, p.surname, p.SocialSecurity);
}
}
}
答案 1 :(得分:0)
问题来自你的建模:你有(银行)客户和人。 我理解客户可以是某个人或(例如)某个组织,但是您的代码无法与假设的班级组织合作,因为他们没有社会安全ID。或者如果他们有,那么你应该将该属性放在客户端,而不是亲自。
如果只有人有SS ID,那么StephaneM提供的解决方案就是您所需要的,但如果没有,那么将该属性移动到类Client