Wątek przeniesiony 2017-06-17 14:57 z Java przez somekind.

Dziedziczenie (kod + parę pytań)

0

Witam, przechodzę powoli do programowania obiektowego. Chciałbym dość dobrze nauczyć się poprawnie pisać kod, stąd rodzi się u mnie kilka pytań. Mając pola w klasie np Samochod, mogę im nadać Od razu wartość początkową tzn private String silnik = "Nie podano", private double moc = -1 itp... Czy lepiej jest nie dawać wartości początkowych i robić to w konstruktorze ? Wydaje mi się, że kod napisałem w miare poprawnie, ale nie jestem na pewno przekonany na pewno do jednego miejsca dokładnie chodzi o klase Samochod, miejsce mojej niepewnosci zaznaczyłem komentarzem w kodzie. Jak można napisać to ładniej ?

Klasa Main

public class Main {

	public static void main(String[] args) {

		Samochod[] samochody = new Samochod[3]; // rezerwuje pamięć
		samochody[0] = new Samochod("Toyota Auris", 1700, 230, 5, "Benzyna 1.6", 123, 9.3);
		samochody[1] = new Samochod(samochody[0]);
		samochody[1].setSilnik("Disel 2.0");
		samochody[1].setMoc(140);
		samochody[2] = new Samochod("Citroen C3", 1300, 170, 5, "Benzyna 1.4", 70, 7.4);

		for (Samochod s : samochody) {
			s.dane();
			System.out.println("");// nowa linia
		}
	}
}

Klasa Pojazd

public class Pojazd {

	private String nazwa;
	private double masa;
	private double predkosc;
	private int iloscMiejsc;

	public Pojazd() {
		super();
		nazwa = "Nie podano nazwy";
		masa = -1;
		predkosc = -1;
		iloscMiejsc = -1;
	}

	public Pojazd(String nazwa, double masa, double predkosc, int iloscMiejsc) {
		super();
		this.nazwa = nazwa;
		this.masa = masa;
		this.predkosc = predkosc;
		this.iloscMiejsc = iloscMiejsc;
	}

	public String getNazwa() {
		return nazwa;
	}

	public void setNazwa(String nazwa) {
		this.nazwa = nazwa;
	}

	public double getPredkosc() {
		return predkosc;
	}

	public void setPredkosc(double predkosc) {
		this.predkosc = predkosc;
	}

	public double getMasa() {
		return masa;
	}

	public void setMasa(double masa) {
		this.masa = masa;
	}

	public int getIloscMiejsc() {
		return iloscMiejsc;
	}

	public void setIloscMiejsc(int iloscMiejsc) {
		this.iloscMiejsc = iloscMiejsc;
	}

	public void dane() {
		System.out.println("Nazwa : " + getNazwa() + "\nMasa : " + getMasa() + "\nPredkosc maksymalna : "
				+ getPredkosc() + "\nIlosc miejsc " + getIloscMiejsc());
	}

}


Klasa Samochod



public class Samochod extends Pojazd {

	private String silnik;
	private int moc;
	private double spalanie;

	public Samochod() {
		super();
		silnik = "Nie podano silnika";
		moc = -1;
		spalanie = -1;
	}

	public Samochod(String nazwa, double masa, double predkosc, int iloscMiejsc, String silnik, int moc,
			double spalanie) {
		super(nazwa, masa, predkosc, iloscMiejsc);
		this.silnik = silnik;
		this.moc = moc;
		this.spalanie = spalanie;
	}

	// Tego nie jestem pewnien, nie wyglada to za ładnie :c
	public Samochod(Samochod sam) {
		setNazwa(sam.getNazwa());
		setMasa(sam.getMasa());
		setPredkosc(sam.getPredkosc());
		setIloscMiejsc(sam.getIloscMiejsc());
		setSilnik(sam.getSilnik());
		setMoc(sam.getMoc());
		setSpalanie(sam.getSpalanie());
	}

	public String getSilnik() {
		return silnik;
	}

	public void setSilnik(String silnik) {
		this.silnik = silnik;
	}

	public int getMoc() {
		return moc;
	}

	public void setMoc(int moc) {
		this.moc = moc;
	}

	public double getSpalanie() {
		return spalanie;
	}

	public void setSpalanie(double spalanie) {
		this.spalanie = spalanie;
	}

	public void dane() {
		super.dane();
		System.out.println("Silnik : " + getSilnik() + "\nMoc : " + getMoc() + "\nSpalanie : " + getSpalanie());
	}

}


0

Cóż, jeśli obiekt jest mutowalny to nie ma takiej potrzeby żeby inicjować pola jeśli nie wiadomo jak. Ale w większości przypadków najlepiej tworzyć tzw. Immutable Object, czyli obiekt który po stworzeniu nie zmienia swojego stanu :)

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