装饰者模式 - 未定义的构造函数
Decorator Pattern - undefined constructor
我的代码有点问题。一切看起来都不错,但是当我尝试启动程序时,我看到了:
"Exception in thread "main" java.lang.Error: 未解决的编译问题:
构造函数 Pakiety(Samochod) 未定义
构造函数 Pakiet2(Samochod) 未定义
构造函数 Pakiet3(Samochod) 未定义
at SamochodInfo.main(SamochodInfo.java:16)"
有代码、评论和 classes 是波兰语,因为这是我的作业。请帮帮我。 :)
第一个class:
//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:
class Audi extends Samochod {
public Audi() {
opis = "Podstawowa wersja samochodu z wyposażeniem standarowym";
}
@Override
public double cena() {
return 75.000;
}
}
第三个class:
abstract class DekoratorSamochodu extends Samochod {
protected Samochod car;
public DekoratorSamochodu(Samochod car) {
this.car = car;
}
@Override
public abstract String getOpis();
}
第四个class:
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;
}
}
第五名class:
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));
}
}
}
car
是类型 Samohod
和 class Pakety
没有接受 Samohod
的构造函数,只有构造函数接受 DekoratorSamochodu
.您需要添加另一个构造函数或更改 Pakiety
、Pakiet2
和 Packiet3
的构造函数以接受 Samohod
而不是 DekoratorSamochodu
我的代码有点问题。一切看起来都不错,但是当我尝试启动程序时,我看到了: "Exception in thread "main" java.lang.Error: 未解决的编译问题: 构造函数 Pakiety(Samochod) 未定义 构造函数 Pakiet2(Samochod) 未定义 构造函数 Pakiet3(Samochod) 未定义
at SamochodInfo.main(SamochodInfo.java:16)"
有代码、评论和 classes 是波兰语,因为这是我的作业。请帮帮我。 :)
第一个class:
//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:
class Audi extends Samochod {
public Audi() {
opis = "Podstawowa wersja samochodu z wyposażeniem standarowym";
}
@Override
public double cena() {
return 75.000;
}
}
第三个class:
abstract class DekoratorSamochodu extends Samochod {
protected Samochod car;
public DekoratorSamochodu(Samochod car) {
this.car = car;
}
@Override
public abstract String getOpis();
}
第四个class:
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;
}
}
第五名class:
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));
}
}
}
car
是类型 Samohod
和 class Pakety
没有接受 Samohod
的构造函数,只有构造函数接受 DekoratorSamochodu
.您需要添加另一个构造函数或更改 Pakiety
、Pakiet2
和 Packiet3
的构造函数以接受 Samohod
而不是 DekoratorSamochodu