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

VPS Starter Arubacloud
0 głosów
182 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,120 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 285 wizyt
pytanie zadane 28 marca 2017 w C i C++ przez akiihombre Początkujący (250 p.)
0 głosów
0 odpowiedzi 217 wizyt
pytanie zadane 13 sierpnia 2020 w C i C++ przez lujasjeden Użytkownik (860 p.)
0 głosów
2 odpowiedzi 191 wizyt

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...