• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dziedziczenie i konstruktory, duża ilość parametrów.

0 głosów
61 wizyt
pytanie zadane 24 grudnia 2016 w Java przez użytkownika nemezisso Użytkownik (860 punkty)

Witam,

mam problem z dziedziczeniem. W podklasie chcę utworzyć konstruktory+ wywołać w nich konstruktor z nadklasy. Wiem jak mógłbym to zrobić, ale wtedy bardzo dużo niepotrzebnego kodu trzeba napisać.

Jest jakaś możliwość, żeby w podklasie w każdym konstruktorze użyć konstrukcji 'super'? A może coś całkiem innego? Przy 5 parametrach w nadklasie i 3 w podklasie tworzenie konstruktorów zajmuje dużo linii kodu, a to chciałbym ograniczyć do minimum. 

Wesołych Świąt!

Tu nadklasa:

public abstract class Book {
    private double value;
    private int ISBNnumber;
    private String title, author, publisher;
    
    public Book(){
        this(0000);
    }
    public Book(int ISBNnumber){
        this(ISBNnumber,"TITLE");
    }
    public Book(int ISBNnumber, String title){
        this(ISBNnumber,title,"AUTHOR");
    }
    public Book(int ISBNnumber, String title, String author){
        this(ISBNnumber,title,author,"PUBLISHER");
    }
    public Book(int ISBNnumber, String title, String author,
                String publisher){
        this(ISBNnumber,title,author,publisher,9.99);
    }
    public Book(int ISBNnumber, String title, String author,
                String publisher, double value){
        this.ISBNnumber=ISBNnumber;
        this.title=title;
        this.author=author;
        this.publisher=publisher;
        this.value=value;
    }

 

Tu podklasa:

public class ClassicBook extends Book{
    private String binding;
    private int pageCount;
    private double weight;
    
    public ClassicBook(){
        this(100);
    }
    public ClassicBook(int pageCount){
        this(pageCount,1);
    }
    public ClassicBook(int pageCount,double weight){
        this(pageCount,weight,"HARDBACK");
    }
    public ClassicBook(int ISBNnumber, String title, String author,
                String publisher, double value,int pageCount,double weight,String binding){
        super(ISBNnumber,title,author,publisher,value);
        this.pageCount=pageCount;
        this.weight=weight;
        this.binding=binding;
    }

 

komentarz 24 grudnia 2016 przez użytkownika K0XM4N Bywalec (2,760 punkty)
Skoro chcesz mięć różne konstruktory tworzące obiekt w różny sposób to po prostu użyj super w konstruktorach podklasy :)
komentarz 24 grudnia 2016 przez użytkownika nemezisso Użytkownik (860 punkty)
edycja 24 grudnia 2016 przez użytkownika nemezisso
public class ClassicBook extends Book{
    private String binding;
    private int pageCount;
    private double weight;
    
    public ClassicBook(int ISBNnumber, String title, String author,
                String publisher, double value){
        super(ISBNnumber,title,author,publisher,value);
        this.pageCount=00;
        this.weight=00;
        this.binding="BINDING";
    }
    public ClassicBook(int ISBNnumber, String title, String author,
                String publisher, double value,int pageCount){
        super(ISBNnumber,title,author,publisher,value);
        this.pageCount=pageCount;
        this.weight=00;
        this.binding="BINDING";
    }
    public ClassicBook(int ISBNnumber, String title, String author,
                String publisher, double value,int pageCount,double weight){
        super(ISBNnumber,title,author,publisher,value);
        this.pageCount=pageCount;
        this.weight=weight;
        this.binding="BINDING";
    }
    public ClassicBook(int ISBNnumber, String title, String author,
                String publisher, double value,int pageCount,double weight,String binding){
        super(ISBNnumber,title,author,publisher,value);
        this.pageCount=pageCount;
        this.weight=weight;
        this.binding=binding;
    }

Zrobiłem to w ten sposób, tylko wydaje mi się, że jest to nie bardzo czytelne. No i wymuszam na użytkowniku wpisanie wszystkich parametrów z klasy "Book". Tzn. tworząc obiekt "Book" użytkownik sam wybiera ilość parametrów, w klasie ClassicBook musi podać wszystko z "Book"+ewentualnie jakieś parametry z "ClassicBook".

Chciałbym to napisać w taki sposób by użytkownik sam decydował ile parametrów i jakie ma wpisać. No i nie bardzo wiem w jaki sposób to można zrobić.

Edit: Może wzorcem Builder, uda się to zrobić, później to sobie przetestuję.

1 odpowiedź

0 głosów
odpowiedź 24 grudnia 2016 przez użytkownika Mateusz51 Dyskutant (7,800 punkty)
Nie widze aby jakoś zmiejszyć ilość kodu. W każdym konstruktorze możesz użyć super() wiec to też jest rozwiazanie.

Jak nie pasuje Ci tworzenie takiej ilośći konstruktorów może warto spróbować stworzyć cos na wzór Bean-sa? Tzn tworzysz tylko jeden konstruktor bezparametrowy który ustawia wszystko na wartości domyślne. A reszte ustawiasz w programie przez odpowiednie getery i setery. (Które w wiekszości IDE można generował ałtomatyczne

Podobne pytania

0 głosów
1 odpowiedź 57 wizyt
pytanie zadane 3 grudnia 2016 w C i C++ przez użytkownika Sinnley Stary wyjadacz (10,080 punkty)
0 głosów
2 odpowiedzi 132 wizyt
pytanie zadane 3 lipca 2016 w C i C++ przez użytkownika endlesik Nowicjusz (150 punkty)
0 głosów
1 odpowiedź 70 wizyt
pytanie zadane 20 lutego 2016 w C i C++ przez użytkownika Turqus Użytkownik (720 punkty)
...