Zmiana prywatnego pola przez inną klasę

0

Witam. Robię prosty program o schronisku aby poćwiczyć OOP. Mam klasę abstrakcyjną Animal, z niej dziedziczą różne zwierzęta i klasę Doctor dziedziczącą z Person. Chciałbym aby tylko Doctor mógł zmieniać pole isSick z klas dziedziczących z Animal. Co zrobić, jak żyć?

package Animals;

abstract public class Animal {
    private String name, sound;
    private Colors color;
    private int age;
    private double height, width;
    private boolean isSick;

    public String getName() {
        return name;
    }

    public String getSound() {
        return sound;
    }

    public Colors getColor() {
        return color;
    }

    public int getAge() {
        return age;
    }

    public double getHeight() {
        return height;
    }

    public double getWidth() {
        return width;
    }

    public boolean isSick() {
        return isSick;
    }

    public String getInfo(){
        return "My name is "+getName()+". I'm "+getAge()+"yo. I'm "+getHeight()+"cm tall and "+getWidth()+"cm wide";
    }

    @Override
    public String toString() {
        return sound;
    }
}
package humans;

import Animals.Animal;

public class Doctor extends Person{

    public Doctor(String name, String surname, int age) {
        super(name, surname, age);
    }

    public void healAnimal(Animal animal){

    }
}
1

Napisz w klasie Doctor metodę setSick(Animal, boolean).
Nie doczytałem pytania.

0

W sumie chodziło mi o to tylko, żeby doktor leczył, nie koniecznie wykazywał czy jest chory.
Ale chodzi mi głównie o to czy można tak jak np. w c++ friend, aby tylko jedna jedyna klasa miała dostęp do prywatnego pola.

Zmiany:

Animal: 

    public void setSick(boolean sick) {
        isSick = sick;
    }
Doctor:

    public void healAnimal(Animal animal){
        if(animal.isSick()){
            animal.setSick(false);
            System.out.println("Now the animal is healthy");
        }else{
            System.out.println("This animal was already healthy");
        }
    }

Przychodzi mi tylko na myśl edytowanie metody w Animal aby wyglądałą tak: setSick(boolean, Person) i sprawdzała czy Person, który bierze jest obiektem typu Doctor czy np. Visitor czy Employee itd i akceptowała tylko Doctor

1

Możesz zadeklarować, że pole sick jest protected. Klasy Animal i Doctor umieścić w jednym pakiecie, a klasę Person zostawić poza pakietem.

0

A no tak, dziękuje i pozdrawiam

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