Cześć!
Mam do rozwiązania proste zadanie z Javy dotyczące głównie ćwiczenia zagadnień dziedziczenia, polimorfizmu i klas abstrakcyjnych.
Moje zadanie wygląda tak:
//Zdefiniować klasy z poniższego programu:
public class Test {
public static void main(String[] args) {
Muzyk[] muzycy = {new Pianista("Jan", 1.5), // Imię, czas wystąpienia (w godz.)
new Flecista("Adam", 1),
new Perkusista("Sebastian", 0.5)};
for (Muzyk m : muzycy)
System.out.println("Muzyk: " + m.nazwisko() + '\n' +
"Instrument: " + m.instrument() + '\n' +
"Czas wystąpienia: " + m.czas() + " godz. " + '\n' +
"Stawka godzinowa: " + m.stawka() + '\n');
System.out.println(Muzyk.maxHonorarium(muzycy)); // muzyk otrzymujący najwyższe honorarium
}
}
w taki sposób, aby otrzymać w wyniku następujący wydruk:
Muzyk: Jan
Instrument: fortepian
Czas wystąpienia: 1.5 godz.
Stawka godzinowa: 500
Muzyk: Adam
Instrument: flet
Czas wystąpienia: 1.0 godz.
Stawka godzinowa: 250
Muzyk: Sebastian
Instrument: bęben
Czas wystąpienia: 0.5 godz.
Stawka godzinowa: 300
Jan, czas = 1.5 godz., stawka = 500
Uwaga: metody instrument() i stawka() muszą być wywoływane polimorficznie.
Uwaga: utworzonej przez generator projektów klasy Test nie wolno zmieniać.//
Mój kod wygląda natomiast tak:
package Zad1;
public class Test {
public static void main(String[] args) {
Muzyk[] muzycy = { new Pianista("Jan", 1.5), // ImiÄ™, czas wystÄ…pienia (w godz.)
new Flecista("Adam", 1),
new Perkusista("Sebastian", 0.5)};
for (Muzyk m : muzycy)
System.out.println("Muzyk: " + m.nazwisko() + '\n' +
"Instrument: " + m.instrument() + '\n' +
"Czas wystÄ…pienia: " + m.czas() + " godz. " + '\n' +
"Stawka godzinowa: " + m.stawka() + '\n');
//System.out.println(Muzyk.maxHonorarium(muzycy)); // muzyk otrzymujÄ…cy najwyĹĽsze honorarium
}
public abstract class Muzyk {
private String imie;
private double czasWystapienia;
public Muzyk (String name, double time){
imie = name;
czasWystapienia = time;
}
public String nazwisko(){
return imie;
}
public double czas(){
return czasWystapienia;
}
public abstract String instrument();
public abstract int stawka();
}
public class Pianista extends Muzyk{
private int stawka = 500;
private String instrument = "pianino";
public Pianista (String name, double time){
super(name, time);
}
public String instrument() {
return instrument;
}
public int stawka() {
return stawka;
}
}
public class Flecista extends Muzyk{
private int stawka = 250;
private String instrument = "flet";
public Flecista (String name, double time){
super(name, time);
}
public String instrument() {
return instrument;
}
public int stawka() {
return stawka;
}
}
public class Perkusista extends Muzyk{
private int stawka = 300;
private String instrument = "bęben";
public Perkusista (String name, double time){
super(name, time);
}
public String instrument() {
return instrument;
}
public int stawka() {
return stawka;
}
}
}
Problemem jest linijka:
Muzyk[] muzycy = { new Pianista("Jan", 1.5), // ImiÄ™, czas wystÄ…pienia (w godz.)
Dostaje dla niej:
No enclosing instance of type Test is accessible. Must qualify the allocation with an enclosing instance of type Test (e.g. x.new A() where x is an instance of Test).
Niestety nie mam pomysłu co może być nie tak. Czy błędem jest samo umiejscowienie klas? A może chodzi o jakieś błędne użycie polimorfizmu bądź dziedziczenia. Niestety te tematy są dla mnie nowe więc będę wdzięczny za wszystkie rozwiązania/wskazówki.
Z góry dzięki!