унаследованная коллекция - PullRequest
       2

унаследованная коллекция

1 голос
/ 15 декабря 2011

У меня есть этот класс

public class Room{

private int n_bed;
private float cost;

private Collection<Client> clientlist;

public Room(int n,float c){

    n_bed = n;
    cost = c;

    clientlist = new ArrayList<Client>();
}

}

и этот класс унаследован от вышеуказанного класса

public class RoomWithBar extends Room{

private Collection<Drink> drinkslist;

public RoomWithBar(int n,float cost){

    super(n,cost);

    drinkslist = new ArrayList<Drink>();
}

public Collection<Drink> getDrinksList(){

    return drinkslist;
}

public void addDrink(Drink drink){

    drinkslist.add(drink)
}

}

мой вопрос таков: я должен также вставить список клиентов коллекции в класс RoomWithBar, или коллекция автоматически наследуется?

Ответы [ 6 ]

1 голос
/ 15 декабря 2011

Вот что делает модификатор protected.

protected Collection<Client> clientlist;

Теперь clientlist будет доступно в производных классах.

Подробнее нажмите здесь.

1 голос
/ 15 декабря 2011

Коллекция автоматически наследуется производным классом.

Однако, поскольку clientlist объявлено private, производный класс не сможет получить к нему прямой доступ: вам либо потребуетсясоздайте метод получения или измените видимость clientList, например, protected.

0 голосов
/ 15 декабря 2011

Как объявить, любой объект / переменная спецификатора наследуется производным классом, но объявляется с частным, тогда вы не можете напрямую получить доступ к этому объекту / переменной

0 голосов
/ 15 декабря 2011

Поскольку clientlist объявлено как личное, вы не можете получить к ним доступ, используя RoomWithBar или даже объект Room

Сделать его защищенным или общедоступным.Или объявите открытый метод в Room, чтобы добавить или получить элементы из clientlist.Вы можете получить доступ к этим методам из объекта RoomWithBar

0 голосов
/ 15 декабря 2011

Вы не сможете получить доступ к коллекции из класса Room, поскольку она является закрытой.

Вам нужно будет либо указать методы для взаимодействия с ней в классе Room (например, addClient в моеммнение, лучшее решение), или сделайте его защищенным и обработайте его в классе RoomWithBar.

Если вы просто измените видимость, вам придется реализовать взаимодействие в каждом расширяющем классе, который вы реализуете в будущем(например, RoomWithJacuzzi или wtv), что не очень хорошо для дизайна.Если вам do необходимо определенное поведение, вы всегда можете переопределить методы обработки клиентов, но они должны быть определены в родительском классе.

0 голосов
/ 15 декабря 2011

clientlist является закрытым полем, поэтому подкласс не может получить к нему доступ. поэтому в классе RoomWithBar вы тоже не сможете его достичь.

Когда вы вызываете супер-конструктор в классе RoomWithBar, инициализация будет выполняться конструктором класса Room.

Однако я бы настоятельно рекомендовал объявить поле clientlist с ключевым словом final для предотвращения неинициализированного поля, потому что, если вы забыли вызвать конструктор super, ваше поле clientlist будет null.

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