Zmienne w głównej klasie, ich wartosci w dodatkowych

0

Witam.

Mam pytanie, czy da się zrobić tak, ażeby mieć w mainie zmienne, a dla każdej osobnej klasy, która ma wyświetlać inne dane wpisać do wyświetlenia tylko te wartości?

Funkcje mają być dziedziczone z głównej klasy, jednak wartości chce nadawać im sam.

Tutaj dla przykładu Firma.java (main)

public class Firma {
    
    private int dzienny_dochod = 0;
    private int ilosc_klientow_na_dzien = 0;
    private int ilosc_pracownikow = 0;
    
        public int podaj_dzienny_dochod()
        {
            return dzienny_dochod;

        }
        public int podaj_ilosc_klientow_na_dzien()
        {
            return ilosc_klientow_na_dzien;
        }

        public int podaj_ilosc_pracownikow()
        {
            return ilosc_pracownikow;
        }
    
    public static void main(String[] args) {
        Gdansk obiekt = new Gdansk();
                obiekt.wyswietl();
    }
}

A tutaj klasa Gdansk.java

public class Gdansk extends Firma {

    private int dzienny_dochod = 721;
    private int ilosc_klientow_na_dzien = 83;
    private int ilosc_pracownikow = 2;
    private String adres = "jakis adres w gda";
    public void wyswietl()
    {
        System.out.println("sklep w gdansku, nalezacy do firmy krzak srak dziennie zarabia "+podaj_dzienny_dochod()+" i ma "+podaj_ilosc_pracownikow()+" pracownikow. Dziennie wpada do nich "+podaj_ilosc_klientow_na_dzien()+" ziomkow");
        System.out.println("Adres sklepu to "+adres);
    }
}

Takie rozwiazanie daje niestety wynik w postaci wyswietlenia wartosci z klasy Firma a nie Gdańsk. Chce mieć te zmienne wspólne dla powiedzmy czterech sklepów, dlatego jest to dla mnie ważne - da to niesamowitą łatwość dodawania sklepów.

Jest to zadanie jakie wymyślił mi znajomy w ramach nauki. Powiedział, że jeżeli nie będę dawać rady, to mam szukać pomocy, co też czynię :(

PS. Przepraszam za strasznie łopatologiczny język zawarty w zwracanym zdaniu, ale głupota zawsze pierwsza wpada do głowy ;}

0

Opcja 1:

W klasie firma ustaw pola na protected, zamiast private.

Następnie w klasie Gdańsk nie definiuj pól, tylko ustaw te z klasy Firma w konstruktorze:

public class Gdansk extends Firma
	{
	private String adres = "jakis adres w gda";
	public Gdansk()
		{
		dzienny_dochod = 721;
		ilosc_klientow_na_dzien = 83;
		ilosc_pracownikow = 2;
		}
	public void wyswietl()
		{
		...
		}
	}

Opcja 2:
Pozostawienie pol w Firma private, oraz dodanie tzw setterow (gettery juz masz, choc ze zlym nazewnictwem) i w konstruktorze klasy Gdansk wywolywanie setterow zamiast bezposrednie przypisywanie wartosci do pol obiektu.

Class Firma
	{
	private int ilosc_klientow = 0;
	public void setIloscKlientow(int ilosc)
		{
		ilosc_klientow = ilosc;
		}
	public int getIloscKlientow()
		{
		return ilosc_klientow;
		}
	}
	
class Gdansk extends Firma
	{
	public Gdansk()
		{
		setIloscKlientow(83);
		}
	}

Twoim bladem jest to, ze w klasie bazowej i dziedziczacej zdefiniowales te same pola z dostepem private, przez co sie dubluja. Dlatego nie pojawialy sie oczekiwane przez Ciebie wartosci.

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