2016-05-10 4 views
1

Ich möchte, dass ein Objekt mehrere erweiterte Objekte behandelt. Das Endergebnis sollte sein, dass ich ein Fahrrad oder MotorBike passiere, es wird die Information anzeigen. In meinem Beispiel unten möchte ich, dass eine Klasse (Display) Bike oder MotorBike (die Bike erweitert) akzeptiert und die Informationen entsprechend anzeigt. Der Fehlerpunkt befindet sich in Anzeige, wobei die letzte Zeile die für MotorBike eindeutigen Informationen ausgibt. Ich bin sicher, ich vermisse etwas Einfaches, aber ich verstehe einfach nicht, was ich falsch mache.Ein Objekt, das mehrere erweiterte Objekte mit demselben Code bearbeitet

Danke für Ihre Hilfe.

Problem.java

public class Problem { 
    public static void main(String[] args) { 
     new Display(new Bike()); 
     new Display(new MotorBike()); 
    } 
} 

Bike.java

class Bike { 
    private boolean frontTireOk; 
    private boolean backTireOk; 
    private int gears; 

    public Bike() {} 

    public boolean isFrontTireOk() { 
     return frontTireOk; 
    } 

    public void setFrontTireOk(boolean frontTireOk) { 
     this.frontTireOk = frontTireOk; 
    } 

    public boolean isBackTireOk() { 
     return backTireOk; 
    } 

    public void setBackTireOk(boolean backTireOk) { 
     this.backTireOk = backTireOk; 
    } 

    public int getGears() { 
     return gears; 
    } 

    public void setGears(int gears) { 
     this.gears = gears; 
    } 
} 

Motorrad, Java

class MotorBike extends Bike { 

    private int engineCC; 

    public MotorBike() {} 

    public int getEngineCC() { 
     return engineCC; 
    } 

    public void setEngineCC(int engineCC) { 
     this.engineCC = engineCC; 
    } 
} 

Display.java

class Display { 

    Bike bike; 

    public Display(Bike bike) { 
     this.bike = (Bike) bike; 
     showBike(); 
    } 

    Display(MotorBike motorBike) { 
     this.bike = (MotorBike) motorBike; 
     showBike(); 
    } 

    private void showBike() { 

     System.out.println("Front tire is OK ?" + bike.isFrontTireOk()); 
     System.out.println("Back tire is OK? " + bike.isBackTireOk()); 
     System.out.println("Gears? " + bike.getGears()); 

     if(bike instanceof MotorBike){ 
      System.out.println("Engine CC? " + bike.getEngineCC()); <--FAIL 
     } 
    } 
} 

Antwort

0

An der Linie

System.out.println("Engine CC? " + bike.getEngineCC()); 

Sie die Methode ‚getEngineCC‘ von Mitglied ‚Fahrrad‘ zugreifen, sondern ‚Fahrrad‘ ist vom Typ Bike, nicht Motorrad, so dass die Methode ‚getEngineCC‘ nicht abgerufen werden kann wenn Sie nur "Fahrrad" alleine benutzen. Versuchen Sie, typecasting:

System.out.println("Engine CC? " + ((MotorBike)bike).getEngineCC()); 
+0

Danke! Ich wusste, dass es etwas Einfaches war. Nun, einfach, wenn Sie es wissen. :) – Techogre

Verwandte Themen