扩展 class 对象 java 的 ID 自动递增

ID auto increment for extended class object java

遇到问题,我的 ID 自动递增代码不起作用。对象的 ID 始终为 0。 也许有人可以帮我解决这个问题。尝试了不同的方式,但仍然不适合我。 对于我的情况,我应该使用 Employee class 作为 ID 计数器。但我不确定我做的是否正确。

超级class

public class Person {
    public String PersonName;
    public String PersonSurname;

    public Person()
    {
        this.PersonName = "";
        this.PersonSurname = "";
    }
    public Person(String PersonName, String PersonSurname)
    {
        this.PersonName = PersonName;
        this.PersonSurname = PersonSurname;
    }
    @Override
    public String toString()
    {
        return "Person name, surname: "+ this.PersonName + " " + this.PersonSurname;
    }

    public void setPersonName(String PersonName)
    {
        this.PersonName = PersonName;
    }
    public void setPersonSurname(String PersonSurname)
    {
        this.PersonSurname = PersonSurname;
    }

    public String getPersonName()
    {
        return PersonName;
    }
    public String getPersonSurname()
    {
        return PersonSurname;
    }

class id counter

public class Employee extends Person {
    private int EmployeeID;
    private static int IdCounter = 0;

    public Employee(){
        super("","");
        EmployeeID = 0;
        this.EmployeeID = IdCounter++;
    }

    public Employee(int EmployeeID, String PersonName, String PersonSurname){
        super(PersonName,PersonSurname);
        this.EmployeeID = IdCounter++;
    }
    @Override
    public String toString()
    {
        return "Person name, surname: " +this.EmployeeID + ". " + this.PersonName + " " + this.PersonSurname;
    }

    public void setEmployeeID(int EmployeeID)
    {
        this.EmployeeID = EmployeeID;
    }

    public int getEmployeeID()
    {
        return EmployeeID;
    }

}

我的主要class

public class Main {

    public static void main(String[] rez) {
        Scanner scanner = new Scanner(System.in);
        String firstDigit = "";
        String secDigit = "";
        Employee CompanyEmployee = new Employee();

        do {

            System.out.println("Please input Name: ");
            firstDigit = scanner.nextLine();

            System.out.println("Please input Surname: ");
            secDigit = scanner.nextLine();

            CompanyEmployee.setPersonName(firstDigit);
            CompanyEmployee.setPersonSurname(secDigit);

            System.out.println(CompanyEmployee);
        }
        while (!firstDigit.equals("dasd"));

请像下面这样更新您的代码

public class Main {

    public static void main(String[] rez) {
        Scanner scanner = new Scanner(System.in);
        String firstDigit = "";
        String secDigit = "";
        List<Employee> listofemployee = new ArrayList<>();
       
        do {

            Employee companyEmployee = new Employee();

            System.out.println("Please input Name: ");
            firstDigit = scanner.nextLine();

            System.out.println("Please input Surname: ");
            secDigit = scanner.nextLine();

            companyEmployee.setPersonName(firstDigit);
            companyEmployee.setPersonSurname(secDigit);

            System.out.println(companyEmployee);
            listofemployee.add(companyEmployee);
        }
        while (!firstDigit.equals("dasd"));

我想您不需要那个 EmployeeID 变量。

public class Employee extends Person {
    private static int id = 0; //renamed your IdCounter variable to just id

    public Employee(){
        super("","");
        id++;            //will increment every time you construct an object 
    }
    
    public Employee(int EmployeeID, String PersonName, String PersonSurname){
        super(PersonName,PersonSurname);
        id++;            //will increment every time you construct an object
    }
   
  
   public getId(){
       return id;
   }


我建议您使用随机化器为您的对象指定一个 id,因为如果您 运行 再次编程,id 字段将变为 0,并且新对象将获得与之前对象相同的 id