Błąd w zadaniu dotyczącym dziedziczenia, abstrakcji i polimorfizmu.

0

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!

0

Kod wydaje się w porządku, może coś z kodowaniem?

0

Zaczęło poprawnie działać w momencie przeniesienia każdej z klas (muzyk, pianista, flecista, perkusista) do odrębnych plików...
Nie jestem pewien - ale czy w takim razie czy błędem mogło być po prostu złe rozlokowanie poszczególnych klas, czy jakieś niedomknięcie { lub } ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.