2017-02-17 6 views
1

Ich lerne gerade über Java und habe eine Frage über die Erstellung einer Unterklasse aus einer abstrakten Klasse. Ich habe dies:Erstellen einer Unterklasse aus einer abstrakten Klasse in Java

public abstract class Bike 
{ 
    private int cost; 

    public Bike(){} 

    public abstract void displayCost(); 
} 


public class SportsBike extends Bike 
{ 
    private int topSpeed(); 

    ??? 
} 

public class CasualBike extends Bike 
    { 
     private int brakeSpeed(); 

     ??? 
    } 


public void main() 
{ 
    SportsBike b1 = new SportsBike(???); 
    CasualBike b2 = new CasualBike(???); 
} 

Wie würde ich den Konstruktor für beide Sportmaschine und casualBike haben, damit sie ihre eigenen Informationen haben würde ?? Ich habe Dinge über @super und so gelesen, aber ich bin mir nicht sicher, wie ich es umsetzen soll. Würde @override funktionieren, wenn ich mehrere Klassen habe, die eine Klasse erben?

+0

ist das Konstruktorargument für beide Klassen SportsBike und CasualBike? –

+1

Fügen Sie einfach die Konstruktoren hinzu, die Sie zu 'SportsBike' und' CasualBike' hinzufügen möchten und setzen Sie, was Sie wollen. Wissen Sie, dass, selbst wenn Sie den Superklassenkonstruktor in den Unterklassenkonstruktoren nicht aufrufen, er für Sie aufgerufen wird, aber vor den Unterklassenkonstruktoren ausgeführt wird, damit Sie Ihre Mitgliedsvariablen nach Belieben initialisieren können. –

Antwort

1

Dies ist ein einfaches Beispiel, das Sie um zu spielen, um zu sehen, wie Konstrukteure arbeiten und wie Superklasse Konstruktoren werden automatisch auch wenn Sie don genannt Rufen Sie sie nicht explizit an:

public class Parent { 
    protected int parentVariable; 
    public Parent(){ 
     parentVariable=1; 
     System.out.println("parent no-argument constructor"); 
    } 
    public Parent(int value) { 
     System.out.println("parent int constructor"); 
     parentVariable = value; 
    } 
    public int getParentVariable() { 
     return parentVariable; 
    } 
} 

public class Child extends Parent { 
    private int childVariable; 

    public Child() { 
     // Call super() is automatically inserted by compiler 
     System.out.println("child no-argument constructor"); 
     childVariable = 99; 
    } 
    public Child(int value, int childValue){ 
     // Explicit call to parent constructor 
     super(value); 
     System.out.println("child int constructor"); 
     childVariable = childValue; 
    } 
    public int getChildVariable() { 
     return childVariable; 
    } 
} 

public class Driver { 

    public static void main(String[] args) 
    { 
     Child c1 = new Child(); 
     Child c2 = new Child(3,199); 

     System.out.println(c1.getParentVariable()); 
     System.out.println(c2.getParentVariable()); 

     System.out.println(c1.getChildVariable()); 
     System.out.println(c2.getChildVariable()); 
    } 

} 
+0

Wie würde es funktionieren, wenn das Kind oder die Unterklasse ihre eigenen Variablen zu initialisieren hat? –

+0

Sie würden einfach den Child/Subclass-Konstruktor verwenden, um die Variablen zu initialisieren, genau wie Sie es mit einer Klasse tun würden, die keine andere Klasse erweitert (außer obliqueally, object). Ich habe die Antwort bearbeitet, um ein einfaches Beispiel zu zeigen. –

+0

Danke für das Beispiel! –

1

Ich gehe davon aus, dass cost sowohl für CasualBike und SportsBike gemeinsame ist.

Verwenden Sie super Schlüsselwort, um diese zwei Klassen aufzurufen und Objekte von ihnen zu bilden.

public class SportsBike extends Bike 
{ 
    SportsBike(int cost){ 
     super(cost); 
    } 

} 

und Ihre abstrakten Klasse sollte wie:

public abstract class Bike 
{ 
    private int cost; 

    public Bike(cost){ 
this.cost=cost; 
} 
} 
+0

Also, würde dies funktionieren, um TopSpeed ​​in SportsBike zu initialisieren? SportsBike (int Kosten, int Geschwindigkeit) { Super (Kosten); topSpeed ​​= Geschwindigkeit; } –

Verwandte Themen