Jak ustawić pole klasy bazowej poprzez wykorzystanie akcesorow klasy ktora po niej dziedziczy

0

Witam, mam problem mam sobie klase Player

  
    abstract class Player {


    public int position;


    public void fastMove() {

    }

    public void slip() {

    }

    public void slowMove() {

    }


    public void setPosition(int position) {
        this.position = position;
    }

    public int getPosition() {
        return position;
    }


}

i klase Turttle

    public class  Turttle extends Player{

    @Override
    public void fastMove() {

        position += 3; }


    @Override
    public void slip() {

        if (position < 6) {

            position = 0;

        } else {

            position -= 6;
        }
    }

    @Override
    public void slowMove() {

        position += 1;

    }

    @Override
    public void setPosition(int position) {
        super.setPosition(position);
    }

    @Override
    public int getPosition() {
        return super.getPosition();
    }
}

Turttle dziedziczy po Player, w Player mam zadeklarowane pole o nazwie position.

Dlaczego po utworzeniu instancji klasy Turttle, nie moge poprzez separator kropki odwołać sie do position ? ani wywołać akcesorow?

Dopiero sie zapoznaje z tematem OOP, wiec z gory dziekuje za pomoc.

1
  1. Popraw fragmenty kodu w poście
  2. Pokaż jak próbujesz się odwołać do position po utworzeniu instancli Turttle
0

@Grzyboo: Tworze instancje, Turttle turttle = new Turttle();

po czym wpisuje turrtle. i nie widze ani position na liscie ani settera ani gettera

1

albo wpisujesz turttle z wielkiej litery albo masz zepsute IDE

0

Jak stworze pole position w klasie Turttle i akcesory to działa a jak chce odwołać się do pola klasy bazowej i użyć get i set to nie działa. Czy to aby na pewno problem środowiska ?

1

Pokaż kod... Dokładny kod co chcesz zrobić i w którym miejscu się nie kompiluje.

0

To jednak wina IDE, dzieki za pomoc.

0

a) o ile nie ma powodów, nie należy w drugiej klasie nadpisywac seterów/geterów. A w dobrze zaprojektowanych założeniach hierarchii klas, powodów nie ma.
b) pole public się w ogóle głęboko kłóci zarówno z zastosowaniem seterów, jak i zasadami OOP. Dziedziczy się funkcjonalności (metody, one np moga być wirtualne), a nie pola
c) klasa abstrakcyjna jest w pełni zaimplementowana, a powinna mieć coś zaplanowane (zadeklarowane) a nie zaimplementowane. Coś kojarzę, że chyba to niektóre kompilatory (w IDE) mogą traktować jako naruszenie

Virus_ napisał(a):

To jednak wina IDE, dzieki za pomoc.

Komunikujesz się w sposób dziwny, coś ukrywasz. W zdaniu powyżej np nazwę IDE, ale ogólnie też.

0

1.Jak juz napisałem wyżej, jestem na etapie nauki.
2. Zapewne masz racje
3. Rozumiem ze w pelni zaimplementowana rozumiesz przez dodanie nawiasow klamrowych do metod? , a powinienem te metody ustawic jako abstrakcyjne aby wymusic na klasie dziedziczacej ich implementacje?

1

@Virus_: a masz jakiś powód żeby tak kombinować? Bo na moje oko to wygląda jakby było niepotrzebne.

0

@TomRiddle: kombinować z czym dokładnie?

0
Virus_ napisał(a):

@TomRiddle: kombinować z czym dokładnie?

No z klasami abstrakcyjnymi

1

abstract class Player Po co ta klasa jest abstrakcyjna, skoro żadna z jej metod abstrakcyjna nie jest?
public int position; Zmień dostęp na protected, czyli dostęp jedynie z tej klasy i klas dziedziczących

Strzelam, że te metody powinny być abstrakcyjne (jeżeli upierasz się przy dziedziczeniu)

public void slip() {

}

public void slowMove() {

}

Nadpisanie tych metod nie zmienia nic:

@Override
public void setPosition(int position) {
    super.setPosition(position);
}

@Override
public int getPosition() {
    return super.getPosition();
}

Wyślij dokładnie z czym masz problem (kawałek kodu, gdzie czegoś nie możesz).

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