Problem z dziedziczeniem klasy Java

Problem z dziedziczeniem klasy Java
DE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 9
0

Hej,
Mam 3 klasy chciałbym żeby 1 z nich dziedziczyła po dwóch. Wiem,że wielodziedziczenie w Javie nie występuję czym mógłbym to zastąpić i jak to zaimplementować?

Kopiuj
public class Figure {

    private String Name;
    private String Color;
    private String Position;
    private String Sign;

    public Figure(String name,String color,String position,String sign){
        this.Name = name;
        this.Color = color;
        this.Position = position;
        this.Sign = sign;
    }

    String getName(){return Name;}
    String getColor(){return Color;}
    String getPosition(){return Position;}
    String getSign(){return Sign;}

    public void writeDate (){
        System.out.print("Name: "+this.getName()+" Color: "+this.getColor());
        System.out.println(" Position: "+this.getPosition()+" Sign: "+this.getSign());
    }

}
Kopiuj
public class Position {

    int x;
    int y;
    String field;


    public void setField(String field) {
        this.x = Integer.valueOf(field.charAt(0) - 64);
        this.y = Integer.parseInt(field.substring(1));
        this.field = field;
    }

    public String getField() {
        System.out.println(field);
        return field;
    }
}
Kopiuj
public class King extends Figure,Position { // tutaj chciałbym użyć "wielodziedziczenia"

    public King(String name, String color, String position, String sign) {
        super(name, color, position, sign);
    }
}
Kopiuj
public class Main {

    public static void main(String[] args) {

        King king = new King("King","White","D1","#");
        king.writeDate();

        Position test = new Position();

        test.setField("C1");
        test.getField();
    }
}
shagrin
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Norwegia, Stavanger
0

Po pierwsze, w Javie nie ma czegoś takiego jak "wielodziedziczenie".
Możesz dziedziczyć z jednej klasy, ale rozszerzać wiele interfejsów.

Po drugie, co właściwie chcesz zrobić? Twoja klasa Figure zawiera pole position, zmień typ ze String na Position, chyba coś takiego chciałeś osiągnąć?

Poza tym, nazwy zmiennych pisz małą literą, zamiast writeDate() - chyba miałeś na myśli writeData().

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5027
1

Klasa w javie nie może dziedziczyć z dwóch klas, ale może implementować dwa (lub więcej) interfejsy. Piszesz normalnie:

Kopiuj
public class Klasa1 implements Interface1, Interface2 {}

A tu jeszcze exetends vs implements:
https://stackoverflow.com/questions/10839131/implements-vs-extends-when-to-use-whats-the-difference#10839155

Pieter24
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 90
0

Zrób może, że pozycja jako podstawa jest klasą dziedziczoną, figura dziedziczy pozycję (Figure extends position) a King dziedziczy figurę (King extends Figure). Choć z drugiej strony jak bardzo chcesz dziedziczyć powinien to być podział od ogółu do szczegółu a w tym wypadku co Ci podałem nijka ma się to do teorii. Najlepiej jakbyś wykorzystał jednak interfejsy jak radzą inni.

Julian_
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1703
0

Lepiej zrobić, żeby pole Figure zawierało obiekt Position... ewentualnie zrobić obiekt Chessboard który ma tablicę, która ma obiekty klasy Figure... W ogóle to król jest figurą, ale nie jest pozycją, więc jak chcesz dziedziczyć kóla po pozycji. Klasa Figure powinna być wg mnie abstrakcyjna.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.