Вопрос по наследованию Java

Пишу примитивный "морской бой", есть два класса - UserMonitor(поле игрока с его кораблями) и BattleMonitor(поле боя).

public class UserMonitor {
    private String name;
    private char[][] field;
    
    public UserMonitor(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
    
    public void showField(){}
    public void setShip(){}
    public void getPosition(){}
    public void setPosition(){}
}
    
public class BattleMonitor {
    private String name;
    private char[][] field;

    public UserMonitor(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void showField(){}
    public void getPosition(){}
    public void setPosition(){}
}

Поскольку у них много общего решил сделать для них общий класс Monitor. Но не знаю как быть с private полями. Если вынести в общий, то придётся делать public, иначе не будет доступа у наследников, но доступ нужен так как нужно будет оперировать элементами массива в методах наследников. Подскажите как лучше это организовать, так как пишу подобное первый раз и хочется все делать правильно.


Ответы (1 шт):

Автор решения: Александр Коромыслов

Ваше стремление сделать общий класс Monitor в данном случае правильное. Для доступа к полям родительского класса следует использовать модификатор доступа protected у полей родительского класса.

public abstract class Monitor {
 protected String name;
 protected char[][] field;
...
}

Хорошим решением будет сделать этот класс abstract. В абстрактном классе можно также определить поля и методы, но нельзя создать объект или экземпляр. Это применимо, поскольку в Вашей реализации могут использоваться экземпляры либо UserMonitor, либо BattleMonitor, но потребности в создании классов обычного Monitor нет.

→ Ссылка