Cześć. Jestem w trakcie poznawania tajników programowania obiektowego w Javie.
Stworzyłem klasę "Person", która jest klasą nadrzędną. Do tego powstała klasa "Wear", aby tą postać ubrać.
Wiem, że można wykorzystać metody super(); i uzupełnić konstruktor klasy Wear o pola z konstruktora klasy Person, co poskutkuje logicznie ubraną już postać.
Ja chciałbym stworzyć najpierw obiekt klasy Person, który jest całkowicie "bez ubrania", a dopiero potem ten obiekt "ubrać". Podsumowując chciałbym uniknąć ścisłej zależności między tymi dwoma klasami i chciałbym, żeby klasa Person była całkowicie niezależną klasą od klasy Wear.
Próbowałem wielu opcji - chociażby wywołanie w Main metody z Person, która wywołuje metodę z klasy Wear - co nawet dla mnie, jako początkującego było logiczne, że raczej nie o to chodzi.
Teraz myślę, że jestem na dobrej drodze i pytanie - czy w konstruktorze klasy nadrzędnej dobrą praktyką jest tworzenie obiektu klasy podrzędnej?
Do tego skutkiem moich wypocin jest zmiana dostępu do pól w klasie Wear z private na protected.
Poniżej znajduje się mój kod podzielony na odpowiednie klasy. Byłbym bardzo wdzięczny za nakierowanie / podpowiedź / wskazanie dobrych praktyk. Dziękuję. :)
Klasa main:
public class Main {
public static void main(String args[]) {
Person adrian = new Person("Adrian","Nazwisko", 99, 250, 320);
adrian.setTop("Koszula", 2);
System.out.println(adrian.getTop());
}
}
Klasa Person:
public class Person {
private String name;
private String surname;
private int age;
private int height;
private int weight;
private Wear wear;
public Person(String name, String surname, int age, int height, int weight) {
this.name = name;
this.surname = surname;
this.age = age;
this.height = height;
this.weight = weight;
wear = new Wear();
}
public Person() {
}
public void setTop(String nazwa, int kolor) {
wear.topName = nazwa;
wear.topColor = kolor;
}
public String getTop() {
return wear.topName;
}
}
Klasa Wear:
public class Wear extends Person {
protected String topName;
protected int topColor;
private String bottomName;
private int bottomColor;
public Wear(String topName, int topColor, String bottomName, int bottomColor) {
this.topName = topName;
this.topColor = topColor;
this.bottomName = bottomName;
this.bottomColor = bottomColor;
}
public Wear() {
}
}