• 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 BIZNES
0 głosów
75 wizyt
pytanie zadane 17 lipca 2017 w Java przez heartagram Obywatel (1,160 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 2017 przez Wiciorny Nałogowiec (28,520 p.)
wybrane 19 lipca 2017 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 2017 przez heartagram Obywatel (1,160 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 2017 przez heartagram Obywatel (1,160 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 105 wizyt
pytanie zadane 28 marca 2017 w C i C++ przez akiihombre Początkujący (250 p.)
0 głosów
2 odpowiedzi 78 wizyt
+1 głos
5 odpowiedzi 166 wizyt
Porady nie od parady
Komentarze do pytań nie służą do odpowiadania, od tego jest wydzielona sekcja odpowiedzi. Funkcją komentarzy jest natomiast możliwość uzyskania dodatkowych informacji na temat samego posta.
Ciekawy innych porad? Odwiedź tę stronę!

44,113 zapytań

83,899 odpowiedzi

167,011 komentarzy

21,086 pasjonatów

Przeglądających: 282
Pasjonatów: 19 Gości: 263

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.

...