2017-02-17 31 views
1

В настоящее время изучаем Java, и у меня возникает вопрос о создании подкласса из абстрактного класса. У меня есть это:Создание подкласса из абстрактного класса в 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(???); 
} 

Как бы я конструктор как и спортивный мотоцикл casualBike так, что они будут иметь свою собственную информацию ?? Я прочитал кое-что о @super и тому подобное, но я не уверен, как его реализовать. Будет ли работать @override, если у меня есть несколько классов, наследующих один класс?

+0

- аргумент конструктора, общий для обоих классов SportsBike и CasualBike? –

+1

Просто добавьте конструкторы, которые вы хотите «SportsBike» и «CasualBike», и установите все, что хотите в них. Знайте, что даже если вы не вызываете конструктор суперкласса в конструкторах подкласса, он будет вызван для вас, но он будет выполнен перед конструкторами подкласса, поэтому вы можете инициализировать свои переменные-члены по своему усмотрению. –

ответ

1

Это простой пример, который вы можете играть вокруг, чтобы увидеть, как конструкторы работают, и как супер класс конструкторы вызываются автоматически, даже если вы не 't явно называть их:

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

Как это работает, если у ребенка или подкласса есть свои собственные переменные для инициализации? –

+0

Вы должны использовать конструктор child/subclass для инициализации переменных так же, как и с классом, который не расширяет какой-либо другой класс (кроме явно выраженного 'Obect', очевидно). Я отредактировал ответ, чтобы показать простой пример. –

+0

Спасибо вам за пример! –

1

Я предполагаю, что cost является общим как для CasualBike, так и для SportsBike.

Используйте ключевое слово super, чтобы вызвать эти два класса и сформировать их объекты.

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

} 

и ваш абстрактный класс должен быть как:

public abstract class Bike 
{ 
    private int cost; 

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

Итак, будет ли это работать для инициализации topSpeed ​​в SportsBike? SportsBike (int cost, int speed) { супер (стоимость); topSpeed ​​= скорость; } –

 Смежные вопросы

  • Нет связанных вопросов^_^