Java Akcesory

0

Witam,

napisałem abstrakcyjną klasę Figura po której dziedziczą Koło, Kwadrat i Trójkąt. Wygląda ona następująco:

public abstract class Figura {
    
    
  private  double area;
  private  double perimeter;
  
  public Figura() {};
  
abstract void  calculateArea();
abstract void  calculatePerimeter();
  

  
 public  double GetArea(){ return area;};
 public  void SetArea(){};
  
 public  double GetPerimeter(){return perimeter;};
 public  void SetPerimeter(){};
}

Moje pytanie brzmi: Czy definicję Set i Get powinny znaleźć się w klasie abstrakcyjnej czy klasach dziedziczących?

0

Zasadniczo nic nie stoi na przeszkodzie, aby ich tam nie było. Klasa abstrakcyjna powinna zawierać elementy, które chcesz potem odziedziczyć. W Twoim wypadku zaoszczędzisz kilka linijek kodu w każdej z klas potomnych, a to jest zawsze na plus.

0

Zależy kiedy - w Twoim przypadku proponuję klasę abstrakcyjną / interfejs. Napisałem interfejs bo myślę, że powinieneś rozważ też jego użycie - wydaje się to lepszym pomysłem.
Tutaj masz porównanie interfejsu z klasą abstrakcyjną: http://stackoverflow.com/questions/1913098/what-is-the-difference-between-an-interface-and-abstract-class
A tutaj podobne pytanie do Twojego: http://codereview.stackexchange.com/questions/83769/implement-a-shape-abstract-class

0

Dziękuję za odpowiedź. A czy poszczególne klasy Koło, Kwadrat itp. powinny zostać dołączone do maina za pomocą słówka

package

?

1

Nie wiem jaki main Ci chodzi. Zasadniczo jeśli nie zdefiniujesz pakietu to wszystkie Twoje klasy są w pakiecie domyślnym i musisz zaimportować wtedy tylko te, które są z innych pakietów. Jeśli np. Figura jest w pakiecie com.classes.abstract, a klasy konkretne to musisz zaimportować w każdej z klas potomnych Figurę poprzez

import com.classes.abstract.Figura;

, zaś jeśli masz gdziekolwiek indziej jakąś klasę z metodą main, to musisz zaimportować do niej te klasy, które Cię interesują.

0
  1. Jest prawie nieprawdopodobne żebyś w którejkolwiek klasie potomnej potrzebował settera, jest zupełnie nieprawdopodobne żebyś potrzebował settera bezargumentowego.
  2. Przestrzegaj konwencji nazewniczych Javy:
 public  double getArea(){ return area;}; 
 public  double getPerimeter(){return perimeter;};

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