получатель наследования от суперкласса и подкласса - PullRequest
0 голосов
/ 30 ноября 2018

Вот особенность моего класса: enter image description here

Мне нужно переопределить метод toString, чтобы каждый класс выводил на печать:

“[Superclass]: [name-of-superclass] ---[subclass]: [name-of-subclass]”

и у меня есть геттерgetDescription для имени каждого класса

Я знаю для подклассов, они должны только сделать super.getDescription и this.getDescription.

  1. Но я не понимаю дляСуперкласс LivingRoomItem, как он может вызвать все getDescription из своего подкласса?

РЕДАКТИРОВАТЬ:

class livingRoomItem{
    int id;
    double price;
    String color;
    String description = "livingRoomItem";

    livingRoomItem(int id, double price, String color, String description){
        this.id = id;
        this.price = price;
        this.color = color;
        this.description = description;
    }

    @Override
    public String toString(){
        return "[Superclass] :" + this.description + "----" + "[subclass]: ";
    }


 public String getDescription() {
    return "livingRoomItem";
}

public void setDescription(String description) {
    this.description = description;
}


class Sofa extends livingRoomItem{
private int seater;

Sofa(int id, double price, String color, String description, int seater){
    super(id, price, color, description);
    this.seater = seater;
}
@Override
public String getDescription(){
    return "Sofa";
}

public int getSeater() {
    return seater;
}

public void setSeater(int seater) {
    this.seater = seater;
}
 @Override
public String toString(){
    return "[Superclass] :" + super.getDescription() + "----" + "[subclass]: "+ this.getDescription() ;
}

}

1 Ответ

0 голосов
/ 30 ноября 2018

Ваш образ мышления правильный, возможно, только ваше исполнение не так.

Учитывая следующие классы:

public class LivingRoomItem
public class Sofa extends LivingRoomItem
public class Table extends LivingRoomItem
public class Lighting extends LivingRoomItem

Вы можете обращаться со всеми из них, как они LivingRoomItem

В вашем методе CalculatePrice вы будете использовать LivingRoomItem, как ожидается, для обработки всех объектов:

public static BigDecimal calculateTotalPrice(List<LivingRoomItem> items) {
    return items.stream().map(item -> item.getPrice()).reduce(BigDecimal.ZERO, BigDecimal::add);
}

Поскольку вы создаете все объекты как сами по себе (не как LivingRoomItem)и, устанавливая цену, она должна работать правильно:

public static void main(String[] args) {

    Sofa sofa = new Sofa();
    sofa.setPrice(BigDecimal.valueOf(200L));

    Lighting lighting = new Lighting();
    lighting.setPrice(BigDecimal.valueOf(652L));

    Table table = new Table();
    table.setPrice(BigDecimal.valueOf(598L));

    System.out.println(PriceUtil.calculateTotalPrice(Arrays.asList(sofa, lighting, table)));
}

Результат: enter image description here


Я получил вашу точку в toString,для целей вашего упражнения вы можете использовать оператор instanceof внутри вашего суперкласса toString:

Пример (внутри вашего LivingRoomItem класса):

return (this instanceof Sofa ? "Superclass... Subclass: Sofa" : "Regular LivingRoomItem toString");

Но, как я уже сказал, я считаю правильным показывать Object как суперкласс :) И только показывать LivingRoomItem на подклассах.

Надеюсь, я смог вам помочь!

...