Wywołanie metody nadklasy, czy jest możliwe ?

0

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.

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.

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