Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 降级,继承。变量无法解析或不是字段_Java_Variables_Inheritance_Downcast - Fatal编程技术网

Java 降级,继承。变量无法解析或不是字段

Java 降级,继承。变量无法解析或不是字段,java,variables,inheritance,downcast,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 v

我有一个家庭作业要做,我有一些向下投射的问题。这是我的三节课

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方法。它说:社会安全无法解决或不是一个领域。名称和姓氏字段相同。我知道我可以将这些字符串复制到客户机类中,问题就会得到解决,但我需要通过向下转换来做到这一点。我读了一些关于RTTI的内容,但仍然找不到解决该问题的任何方法。

如果已将人员添加到银行类,您可以尝试将您的客户重新分配给人员:

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);
         }
    }
}

问题来自你的建模:你有银行客户和个人。 我知道客户可以是个人,也可以是组织,但是您的代码不能用于假设的类组织,因为他们没有社会保险id。或者,如果他们有,您应该将该属性放在客户机中,而不是放在个人中


如果只有个人有SS ID,那么StephaneM提供的解决方案就是您所需要的,但如果没有,则将该属性移动到类客户端

此注释是离题的,但我忍不住要写它:Java中的变量和属性名称应该以小写字母开头。只有类和接口名称必须以大写字母开头