Декоратор Pattern - неопределенный конструктор - PullRequest
0 голосов
/ 06 июня 2018

У меня проблема с моим кодом.Все выглядит хорошо, но когда я пытаюсь запустить программу, я вижу это: «Исключение в потоке» main »java.lang.Error: Нерешенные проблемы компиляции: конструктор Pakiety (Samochod) не определен Конструктор Pakiet2 (Samochod) не определен Конструктор Pakiet3(Самоход) не определено

at SamochodInfo.main(SamochodInfo.java:16)"

Есть код, комментарии и классы на польском языке, потому что это моя домашняя работа. Помогите мне, пожалуйста.:)

Первый класс:

//Definiujemy klasę abstrakcyjną
abstract class Samochod {
protected String opis;

public String getOpis() {
    return opis;
}

public abstract double cena(); 

@Override //Nadpisanie metody
public String toString() {
    return cena() + "(" + getOpis() + ")";


}
}

Второй класс:

class Audi extends Samochod {

public Audi() {
    opis = "Podstawowa wersja samochodu z wyposażeniem standarowym";
}
@Override
public double cena() {
    return 75.000;
    }
}

Третий класс:

abstract class DekoratorSamochodu extends Samochod {
    protected Samochod car;

public DekoratorSamochodu(Samochod car) {
    this.car = car;
}

@Override
public abstract String getOpis();
}

Четвертый класс:

class Pakiety extends DekoratorSamochodu {

public Pakiety(DekoratorSamochodu car) {
    super(car);
}

@Override // Nadpisanie metody Opis (analogicznie w innych pakietach)
public String getOpis() {
    return car.getOpis() + ", Pakiet Smart";
}

@Override // Nadpisanie metody cena - cena zwiększy się o 10tyś. zł 
(analogicznie w innych
            // pakietach)
public double cena() {
    return car.cena() + 10.000;
}
}

class Pakiet2 extends DekoratorSamochodu {

public Pakiet2(DekoratorSamochodu car) {
    super(car);
}

@Override
public String getOpis() {
    return car.getOpis() + ", Pakiet Wygoda";
}

@Override
public double cena() {
    return car.cena() + 25.000;
}
}

class Pakiet3 extends DekoratorSamochodu {

public Pakiet3(DekoratorSamochodu car) {
    super(car);
}

@Override
public String getOpis() {
    return car.getOpis() + ", Pakiet Exclusive";
}

@Override
public double cena() {
    return car.cena() + 37.000;
}
}

Пятый класс:

import java.util.List;

import java.util.*;

public class SamochodInfo {
public static void main(String[] args) {
    Samochod car;
    List<Samochod> info = new ArrayList<>();

//Wyświetlenie podstawowej wersi Audi
    car = new Audi();
    info.add(car);

//Wyświetlenie pierwszego pakietu Audi - smart
    car = new Audi();
    car = new Pakiety(car);
    info.add(car);

//Wyświetlenie druiego pakietu Audi - wygoda
    car = new Audi();
    car = new Pakiet2(car);
    info.add(car);

//Wyświetlenie trzecieko pakietu Audi - exclusive
    car = new Audi();
    car = new Pakiet3(car);
    info.add(car);

    for (int i = 0; i < info.size(); i++) {
        int infoNr = i+1;
        System.out.println("Informacje o samochodzie " + infoNr + ":");
        System.out.println(" * " + info.get(i));
    } 


}
}

1 Ответ

0 голосов
/ 06 июня 2018

car имеет тип Samohod, а класс Pakety не имеет конструктора, который принимает Samohod, только конструктор принимает DekoratorSamochodu.Вам нужно либо добавить другой конструктор, либо изменить конструкторы Pakiety, Pakiet2 и Packiet3, чтобы они принимали Samohod вместо DekoratorSamochodu

...