向下倾斜,继承。变量无法解析或不是字段

时间:2015-05-14 18:11:30

标签: java variables inheritance downcast

我有一项功课要做,而且我有一些转发问题。这是我的三个班级。

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的内容,但仍无法找到解决该问题的方法。

2 个答案:

答案 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