Klasa abstrakcyjna, tworzenie obiektu, blad w tresci zadania?

0

Witam. Nadrabiam zaległości z zajęć i mam pewien problem. w zadaniu mam utworzyc klase Czlowiek, a w niej abstrakcyjna metoda skadDochod, czyli klasa Czlowiek tez musi byc abstrakcyjna. Wszystkie klasy wydaje mi sie utworzylem jak w tresci, jednak zatrzymalem sie na poleceniu utworzenia obiektu klasy Czlowiek i nie wiem jak dalej z tym postąpic. tresc zadania oraz klasy ponizej. prosze o wytlumaczenie oraz podpowiedz jesli moglem cos inaczej tzn. lepiej napisac.

 Zadanie 1
1. Utwórz klasę Czlowiek posiadającą następujące właściwości oraz zachowania:
Właściwości:
Imię, nazwisko, wiek, płeć (char np. ‘k’, ‘m’, ‘n’- nieznana), zawód, private zatrudniony (domyślnie - nie)
Zachowania publiczne:
- jakSieNazywasz()
- jestesKobieta() – zwracająca wartości :tak, nie, nie wiadomo (wykorzystaj switch)
- wJakimWieku()
- protected zatrudnij() – ustawiającej zmienną zatrudniony
- skadDochod() – metoda abstrakcyjna (bez implementacji)
2. Dodaj do klasy konstruktory:
2.1. Czlowiek() – ustawiający właściwości tekstowe na NN (nieznane) i liczbowe na 0.
2.2. Czlowiek(Imie, Nazwisko) – ustawiający nieznane właściwości jak w pkt. 1.
2.3. Czlowiek(Imie, Nazwisko, Wiek, Plec)
3. Utwórz klasę Pracownik dziedziczącą po klasie Czlowiek i:
3.1. Posiadającą własne pola: zawod, miejscePracy, dochod
3.2. Posiadającą dodatkowy konstruktor: Pracownik(Imie, Nazwisko, Wiek, Plec, Zawod, miejscePracy,
dochod) korzystającą z konstruktora klasy Czlowiek
3.3. Posiadającą własną publiczną metodę zatrudnij(miejscePracy, dochod) korzystającą z metody
zatrudnij() klasy Czlowiek
3.4. Posiadającą własną metodę: skadDochod() zwracającą nazwę zakładu pracy i dochód lub informację,
że nie ma dochodu
3.5. Posiadającą własną metodę statyczną: dajRaport(Pracownik) wyświetlającą wszystkie dane o
pracowniku.
4. Utwórz klasę Pracodawca dziedziczącą po klasie Czlowiek i:
4.1. Posiadającą pole: nazwaFirmy, preferencje, pensjaPracownicza
4.2. Posiadającą dodatkowy konstruktor umożliwiający uzupełnienie dodatkowych pól w stosunku do klasy
Czlowiek
4.3. Posiadającą metodę: zatrudnij(Pracownik) – umożliwiającą zatrudnienie pracownika o zawodzie
zgodnym z preferencjami pracodawcy.
W programie:
1. utwórz obiekt klasy człowiek i wywołaj jego metodę zatrudnij() i sprawdź wartość zmiennej zatrudniony
2. wywołaj metodę dajRaport, aby sprawdzić dane Pracownika utworzonego za pomocą każdego z
konstruktorów,
3. utwórz kilku pracowników i zapisz ich do kontenera obiektów klasy ArrayList().

KLASA CZLOWIEK

package lab4;

/**
 *
 * @author Gregor
 */
public abstract class Czlowiek {

    private String imie,nazwisko,zawod;
    private int wiek;
    private String zatrudniony = "Nie";
    private char plec;
    
    public void jakSieNazywasz(){
        System.out.println("Imię: " + imie);
        System.out.println("Nazwisko: " + nazwisko);
    }
    
    public void jestesKobiata(){
        switch(plec){
            case 'k':
                System.out.println("Kobieta");
                break;
            case 'm':
                System.out.println("Męźczyzna");
                break;
            case 'n':
                System.out.println("Płeć nieznana");
                break;
            default:
                System.out.println("WTF");
                break;
        }
    }
    
    public void wJakimWieku(){
        System.out.println("Wiek: " + wiek);
    }
    
    protected void zatrudnij(){
        this.zatrudniony = "Tak";
    }
    
    public abstract void skadDochod();

    //KONSTRUKTORY
    
    public Czlowiek(){
        this("NN", "NN", 0, 'n');
    }
    
    public Czlowiek(String imie, String nazwisko){
        this(imie, nazwisko, 0, 'n');
    }
    
    public Czlowiek(String imie, String nazwisko, int wiek, char plec){
        this.imie = imie;
        this.nazwisko = nazwisko;
        this.wiek = wiek;
        this.plec = plec;
    }

}

KLASA PRACOWNIK

package lab4;

/**
 *
 * @author Gregor
 */
public class Pracownik extends Czlowiek {
    String zawod, miejscePracy;
    double dochod;
    
    public Pracownik(String imie, String nazwisko, int wiek, char plec, String zawod, String miejscePracy, double dochod){
        super(imie, nazwisko, wiek, plec);
        this.zawod = zawod;
        this.miejscePracy = miejscePracy;
        this.dochod = dochod;
    }


    
    public void zatrudnij(String miejscePracy, double dochod){
        super.zatrudnij();
        this.miejscePracy = miejscePracy;
        this.dochod = dochod;
    }
    

    public void skadDochod(){
        System.out.println("Miejsce pracy: " + miejscePracy);
        if(dochod == 0){
           System.out.println("Brak dochodu."); 
        }else{
            System.out.println("Dochód: " + dochod); 
        }
    }
    
    public static void dajRaport(Pracownik prac){
        prac.jakSieNazywasz();
        prac.jestesKobiata();
        prac.wJakimWieku();
        prac.skadDochod();
    }
}

KLASA PRACODAWCA

package lab4;

import java.util.Arrays;

/**
 *
 * @author Gregor
 */
public class Pracodawca extends Czlowiek{
    String nazwaFirmy;
    String[] preferencje;
    double pensjaPracownicza;
    
    public Pracodawca(String imie, String nazwisko, int wiek, char plec, String nazwaFirmy, String[] preferencje, double pensjaPracownicza){
        super(imie, nazwisko, wiek, plec);
        this.nazwaFirmy = nazwaFirmy;
        this.pensjaPracownicza = pensjaPracownicza;
        this.preferencje = new String[preferencje.length];
        this.preferencje = Arrays.copyOf(preferencje, preferencje.length);
        /*
         * System.arraycopy(preferencje, 0, this.preferencje, 0, preferencje.length);
         * this.preferencje = Arrays.copyOf(preferencje, preferencje.length);
         */
    }
    
    public void zatrudnij(Pracownik prac){
        for(int i=0;i<preferencje.length;i++){
            if(preferencje[i].equals(prac.zawod)){
                prac.zatrudnij(nazwaFirmy, pensjaPracownicza);
            }
        }
    }
        public void skadDochod() {
        
    }
}

KLASA GLOWNA

package lab4;

/**
 *
 * @author Gregor
 */
public class Main {
    
    
     public static void main(String[] args) {
         
         Czlowiek czlowiek = new Czlowiek();
         
         
     }
}
1

Albo musisz utworzyć "jakiegoś" konkretnego człowieka (np. Pracownika) albo musisz utworzyc klasę anonimową dziedziczącą z człowieka i implementującą abstrakcyjne metody.

0

ok, dzieki

czyli pisząc "Albo musisz utworzyć "jakiegoś" konkretnego człowieka (np. Pracownika)" masz na myśli:

Pracownik pracownik = new Pracownik(Jan,Kowalski,20,m,blacharz, blacharnia,2000);
tak? w tym przypadku musze dodac wszystkie pola czyli nie moge sprawdzic zachowania jak w poleceniu kolejnych konstruktorow.

pisząc "musisz utworzyc klasę anonimową dziedziczącą z człowieka i implementującą abstrakcyjne metody" masz na myśli:


public class Main {
    
    
     public static void main(String[] args) {
         
         Czlowiek czlowiek = new Czlowiek(){
             public void skadDochod(){
                 System.out.println("test");
             }
         };
         System.out.println(czlowiek.zatrudniony);
         czlowiek.zatrudnij();
         System.out.println(czlowiek.zatrudniony);
         czlowiek.jakSieNazywasz();
         czlowiek.jestesKobiata();
         czlowiek.wJakimWieku();
         czlowiek.skadDochod();
         
         Czlowiek czlowiek1 = new Pracownik();
         
         czlowiek1.skadDochod();
         czlowiek1.jakSieNazywasz();

}
}

próbowałem jeszcze tak : Czlowiek czlowiek1 = new Pracownik();
tylko musiałem dodać do klasy Pracownik taki kod:

    Pracownik() {
       super();
    }

i pewnie dla pozostałych konstruktorów też musiałbym dodać

tylko w tym przypadku ostatnim sam do końca nie rozumiem jak to działa. czy ten czlowiek1 jest typem Czlowiek czy typem Pracownik. jak odpalam metodę czlowiek.skadDochod() to jest ona z klasy Pracownik.

wiem ze już zamotałem trochę, ale chce to bardziej zrozumieć;p

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