Witam, zastanawiam się nad jedną kwestią. Przyjmijmy, że mamy 3 klasy - figura,prostokąt i kwadrat. Klasami dziedziczącymi są kwadrat i prostokąt. Dodatkowo klasa figura implementuje interfejs z metoda obliczania pola. I teraz mam pytanie, czy jest możliwość wywołania metody obliczania pola zdefiniowanej w klasie figura ? Gdyby to było w klasie prostokąt, bądź kwadrat to mamy super(). Ale mi chodzi o wywołanie tej metody w jakieś tam innej klasie, oczywiście metoda obliczania pola public. Wiadomo, że jak implementuje interfejs, to we wszystkich 3 klasach musi być zdefiniowana ta metoda. Ale jak wiadomo ta w klasie figura zostaje nadpisana przez te w klasach prostokat i kwadrat. Mam nadzieje, że w miarę jasno to opisałem ;d Z góry dzięki.
0
2
Możesz użyć wzorca metody szablonowej (chociaż tutaj nie wiem po co).
public abstract class Figura {
public final double obliczPole() {
// tu mozesz dodac ew. kod ktory wykona sie dla wszystkich figur w trakcie obliczania
return wykonajObliczPole();
}
// ta metoda musi byc nadpisana w kazdej figurze
protected abstract double wykonajObliczPole();
}
public class Kwadrat extends Figura {
public Kwadrat(double dlugoscBoku) { dlugoscBoku_ = dlugoscBoku; }
protected double wykonajObliczPole() {
return dlugoscBoku_ * dlugoscBoku_;
}
private double dlugoscBoku_;
public static void main(String[] args)
{
Kwadrat k = new Kwadrat(12.0);
double pole = k.obliczPole();
}
}
0
nie da sie z zewnatrz wywolac przeslonietej metody bazowej jesli o to ci chodzi. stworz sobie dodatkowa metode i jej nie przeslaniaj. btw brzmi troche jak code smell, po co ci dostep do super.metody z zewnatrz?
0
Czyli rozumiem, że nie da się wywołać tej metody na rzecz obiektu typu figura ? Nie jest to problem, który napotkałem w moim programie, jedynie czysta ciekawość, bo tak się nad tym zacząłem zastanawiać i się chciałem tylko dowiedzieć.
0
nie, jak przeslonisz to sie nie da, musisz uzyc sposobu @vpiotr lub po prostu dodac sobie nowa finalna metode w klasie bazowej ktora pozwala na wywolanie tego co chcesz
0
Okok, dzięki za wyjaśnienie sprawy.