Czy można upewnić się, że zostanie wywołana metoda z konkretnej klasy?

0
/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		nadklasa n = new podklasa();
		n.pisz();
	}
}

class nadklasa {
	void pisz() {System.out.println("Lala");}
}

class podklasa extends nadklasa {
	void pisz() {System.out.println("Lele");}
}

http://ideone.com/mgTozn

Czy można w jakikolwiek sposób sprawić, by wywołała się metoda "pisz" z nadklasy, a nie podklasy? Tak, żeby wypisało się Lala, a nie Lele?

Próbowałem nadklasa.n.pisz(), ale nic z tego... nie kompiluje się

0

Nie da sie. Jedyne co mozesz zrobic to w podklasie wywolac metode nadllasy za pomoca super.pisz().

/* Name of the class has to be "Main" only if the class is public. */

WTF? Nie ma zadnych wymagan co do nazwy Main ani czy klasa glowna ma byc public czy nie.

0

Po co chcesz referencje typu nadklasa przypisać do obiektu podklasa?
ja bym stworzył obiekt nadklasa n = new nadklasa();
jak chcesz jednym typem obiektu wywoływać, dwie takie same funkcje wywołać to możesz inne nazwy lub je przeciążyć

0

@kmph napisz co chciałbyś uzyskać wtedy może znajdziemy lepsze rozwiązanie

0

Jedyna możliwość osiągnięcia tego czego chcesz czyli wywołania metody konkretnego przodka jest użycie refleksji. Wcześniej trzeba jednak napisać sobie procedurę wyszukującą metody przodków o tej nazwie, zgodnych parametrach i typie wyniku oraz wtedy ewentualnie udostępniającą ją do wywołania.
Nie jest to jednak dobra praktyka bo łamie podstawowe zasady Javy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1