• 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)

Object Storage Arubacloud
0 głosów
185 wizyt
pytanie zadane 17 lipca 2017 w Java przez heartagram Obywatel (1,770 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 Ekspert (269,710 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,770 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,770 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 286 wizyt
pytanie zadane 28 marca 2017 w C i C++ przez akiihombre Początkujący (250 p.)
0 głosów
0 odpowiedzi 235 wizyt
pytanie zadane 13 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)
0 głosów
2 odpowiedzi 194 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...