Как вызвать переменную суперкласса в методе подкласса Java - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть абстрактный класс, называемый User, и подкласс, называемый Staff, который расширяет User.Класс User содержит метод: protected abstract void setId (String newId) {}: который устанавливает личную переменную 'id' в классе User.Поэтому моя проблема в том, что когда я иду к созданию метода setId () в классе Staff, как я могу обратиться к 'id' в классе User, если он является закрытым?Насколько я знаю, переменная 'id' не может быть установлена ​​как защищенная.Спасибо всем, кто может помочь!

@Override
public void setId(String newId){
    if(checkValidId(newId)){
       ????
    }
}

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы должны создать метод получения в суперклассе, называемый getID (), который просто возвращает this.id.Метод может быть вызван из любого класса, который расширяет абстрактный класс и может использоваться для получения значения из поля id.Если это то, к чему вы стремитесь :)

Важно отметить, что вы можете сделать это, потому что всякий раз, когда вы создаете новый объект для Staff, самая первая строка в конструкторе должна вызывать конструктор.внутри пользователя, чтобы установить обязательное поле.Например, поле id в этом случае.

Ниже приведен рабочий пример, который динамически устанавливает идентификатор, начиная со значения 5. Вы можете запустить его, чтобы подтвердить результаты или взглянуть на скриншот, прикрепленный ниже.

abstract class User{
    static int count = 5; 
    private int id; 

    public User(){
        this.id = count++; 
    }

    public int getID(){
        return this.id; 
    }
}

class Staff extends User{
    public Staff(){
        super();
    }
    public int getID(User x){
        return super.getID(); 
    }
}

public class Program {
    public static void main(String[] args){
        Staff x = new Staff(); 
        System.out.println(x.getID()); 
    }
}

Результаты

0 голосов
/ 19 декабря 2018

Вы можете создать метод setId внутри класса User и получить к нему доступ через класс Staff.

public abstract class User{

...
   public void setId(String id){
      this.id=id;
   }

}

public class Staff extends User{

...


   public void setStaffId(String newId){
       if(checkValidId(newId)){
          setId(newId);
       }
   }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...