JAk zaimplementować interfejs rozszerzający inny interfejs

JAk zaimplementować interfejs rozszerzający inny interfejs
T9
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam, mam problem jak zaimplementować interfejs rozszerzający inny interfejs

Kopiuj
public interface Block {
    String getColor();
    String getMaterial();

}

public interface CompositeBlock  extends Block{
    List<Block> getBlocks();
}

  Block blockk ;
    CompositeBlock block = new CompositeBlock() {
        @Override
        public List<Block> getBlocks() {
          return   blocks;
        }

        @Override
        public String getColor() {
            return block.getColor();
        }

        @Override
        public String getMaterial() {
            return null;
        }
    };

Dostaje stackOwerFlow.
Z góry dzieki :P

Grzyboo
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 206
0

Wstaw cały kod, bo to jest jakaś losowa sklejka, co się nawet nie skompiluje.

Kopiuj
return   blocks;

co to niby jest blocks?

Kopiuj
return block.getColor();

co to jest block? Jeżeli to jakimś cudem się skompilowało, to znaczy, że użyłeś CompositeBlock block tej referencji w środku jej implementacji i wywołujesz getColor w nieskończoność.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

@teka93 normalnie, bo takie rozszerzenie dodaje po prostu metody z pierwszego interfejsu do drugiego. Twój problem jest gdzieś indziej. Nie wiadomo czym u ciebie jest blocks i nie wiadomo tez za bardzo co znaczy getColor albo getMaterial jak masz composite block złożony z wielu innych. Nie bardzo ma to jakiś sens.

TI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Jeżeli chcesz mieć absurdalną implementację, byle się kompilowało, to zwróć 3x null (15,20,25 linia).

Jeżeli chcesz mieć coś typowego dla szkolnych przykładów, to wypada stworzyć klasę implementującą i jeden i drugi interfejs, dajmy na to MyBlock i MyCompositeBlock.
Wtedy MyBlock ma 2 pola (typu String) ze swoimi właściwościami.
Wtedy MyCompositeBlock to jak rozumiem węzeł grafu który ma jeden "główny" block i listę jakoś skojarzonych blocków. Tu znowu będą 2 pola, jedno z głównym blokiem, a drugie z listą bloków. Metody wynikające z Block po prostu przekierowujesz do głównego bloku return mainBlock.getColor();.

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1909
0

Prawdopodobnie robisz to w niewłaściwy sposob - jeśli implementujesz composite pattern, to tak naprawdę chcesz mieć dwie klasy impelmentujace jeden interfejs - np. SingleBlock i CompositeBlock nad jednym interfejsem np. Block

https://www.baeldung.com/java-composite-pattern

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.