• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Metoda wypisująca wiadomość do klasy bazowej. (java)

Ultraszybki serwer VPS NVMe START
0 głosów
74 wizyt
pytanie zadane 17 lipca w Java przez heartagram Obywatel (1,110 p.)

cześć, dzisiaj mam taki problem. W jednej sławniejszych książek miałem za zadanie zrobić generator losowych figur. (to w zasadzie było już zrobione) . Jednak w ćwiczeniach miałem coś takiego: "Dodaj nową metodę wypisującą wiadomość do klasy bazowej w pliku Shapes.java, nie przesłaniaj jej jednak w klasie pochodnej. Wytłumacz co się wtedy dzieje. Następnie przesłoń tę metodę w jednej z klas pochodnych ( jednak nie we wszystkich) i zaobserwuj co się dzieje.

 

// zapomniałem dodać kodu :)

 

package polymorphism.shape;

public class Shape {
	public void draw() {}
	public void erase() {}
}

package polymorphism.shape;

public class Square extends Shape {

	public void draw() {System.out.println("Square.draw()"); }
	public void erase() {System.out.println("Square.draw()"); }

	
}
package polymorphism.shape;

public class Circle extends Shape{
	
public void draw() {System.out.println("Circle.draw()");}
public void erase() {System.out.println("Circle.erase()");}

}


package polymorphism.shape;

public class Triangle extends Shape {

	public void draw() {System.out.println("Triangle.draw()"); }
	public void erase() {System.out.println("Triangle.draw()"); }
}package polymorphism.shape;

import java.util.Random;

public class RandomShapeGenerator {
	private Random rand = new Random(47);
	public Shape next() {
switch(rand.nextInt(13)) {
default:
case 0: return new Circle();
case 1: return new Square();
case 2: return new Triangle();
}
		
	}
	}
	

package polymorphism.shape;

public class Shapes {
	public void met(){ }    // metoda do wypisywania komunikatu?
private static RandomShapeGenerator gen = new RandomShapeGenerator();
	public static void main(String[] args) {
	Shape s[] = new Shape[9];
	for(int i=0; i<s.length; i++)

		s[i]=gen.next();
	
	for(Shape shp: s)
		shp.draw();
}
}

 

Kompletnie nie wiem jak się zabrać do tego. Jeszcze przesłonić może bym dał radę ale nie wiem jak wypisać wiadomość do bazowej klasy.

1 odpowiedź

+1 głos
odpowiedź 17 lipca przez Wiciorny Pasjonat (24,160 p.)
wybrane 19 lipca przez heartagram
 
Najlepsza
"Dodaj nową metodę wypisującą wiadomość do klasy bazowej w pliku Shapes.java," Źle to rozumiesz, haha nie chodzi o dodanie metody, która wyśle wiadomośc do klasy bazowej, chodzi o to aby do klasy bazowej [ tej po której podklasy dziedzicza] dodać nowa metode wypisującą bez przysłaniania.

Po to żeby sprawdzić własnie co się stanie w sytuacji kiedy zauważ, że w klasach pochodnych masz funkcje wypisujące, natomiast w klasie bazowej jeszcze nie. Chodzi o idee polimorfizmu i tego .

Zaimplementuj metode "met" tak aby wypisywała jak draw..., a potem zdefiniuj w podklasie metode "met" przysłaniając czyli o tej samej nazwie i wtedy sprawdz co się stanie
komentarz 17 lipca przez heartagram Obywatel (1,110 p.)
" metoda wypisującą bez przesyłania " oraz metoda wysyłająca wiadomość do klasy bazowej tego i tego nie rozumiem :v Czy to ma być poprostu do klasy Shape dodane: public void metoda() {}   ?

Co do przesłonięcia (np.  public void metoda() { System.out.println("Circle.metoda()";}  ) to zobaczę to w domu bo nie mam dostępu teraz do kompilatora, a o dziwo skopiowany kod działający w eclipsie nie działa mi np na ideone.com..
komentarz 18 lipca przez heartagram Obywatel (1,110 p.)
Chyba to jakoś na ślepo czytałem i pisałem.. Oczywiście chodzi o metoda wypisująca bez PRZESŁANIANIA, a nie przesyłania xd Ale jednak potrzebuje porady małej.

Rozumiem już, że chodzi z public void metoda() {} w klasie Shape , jednak nie przesłaniając jej nie mam możliwości nic zobaczenia w wyniku ( to wiadome ) gdy wywołam np:

Triangle x = new Triangle();
        x.metoda();

Co się wtedy dzieje? Wydaje mi się, że to daje możliwość przesłonięcia jej później w klasach które będą dziedziczyły po Shape. Jeżeli ją przesłonie np w klasie Triangle:

public void metoda() {System.out.println("Triangle.metoda()");}    , to wtedy będę miał wynik właśnie przy wywołaniu:

Triangle x = new Triangle();
        x.metoda();

// Triangle.metoda()

 

Zastanawia mnie jeszcze fakt jeden. Czemu jeżeli dodam poprostu metode do klasy Triangle:

public void metoda() {System.out.println("Triangle.metoda()");}

i nie mam jej w klasie bazowej jako //public void metoda() {}

to wciąż przy wywołaniu:

Triangle x = new Triangle();
        x.metoda();

dostanę w oknie wynikowym:

// Triangle.metoda()

? :X

 

Taką mam odpowiedź na to chodź wrażenie, że nic nie rozumiem z tego..

Podobne pytania

0 głosów
2 odpowiedzi 103 wizyt
–1 głos
1 odpowiedź 70 wizyt
pytanie zadane 1 stycznia w Java przez Jonbi2 Dyskutant (8,260 p.)
0 głosów
1 odpowiedź 48 wizyt
pytanie zadane 28 grudnia 2016 w Java przez SebekMakaron Obywatel (1,290 p.)

41,300 zapytań

80,251 odpowiedzi

158,749 komentarzy

19,719 pasjonatów

Przeglądających: 278
Pasjonatów: 18 Gości: 260

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...