Problem z dziedziczeniem klasy Java

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ć?

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());
    }

}
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;
    }
}
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);
    }
}
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();
    }
}
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().

1

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

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

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.

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.

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