Obecnie uczenie się o Javie i mam pytanie dotyczące podklasy z klasy abstrakcyjnej. Mam to:

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

Jak mam konstruktor zarówno dla sportowców, jak i przypadków, aby mieli własne informacje? Przeczytałem rzeczy o @Super i takiej, ale nie jestem pewien, jak go wdrożyć. Czy @override działa, jeśli mam wiele klas dziedziczyć jedną klasę?

1
Nukodi 17 luty 2017, 07:35

2 odpowiedzi

Najlepsza odpowiedź

Jest to prosty przykład, który można grać, aby zobaczyć, jak działa konstruktorzy, a jak konstruktorzy Super klasy są wywoływane automatycznie, nawet jeśli nie dzwonisz do nich:

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

}
1
David Choweller 17 luty 2017, 13:51

Zakładam, że cost jest powszechny zarówno dla CasualBike, jak i SportsBike.

Użyj super słowo kluczowe, aby zadzwonić do tych dwóch klas i formować obiekty.

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

}

A twoja klasa abstrakcyjna powinna być jak:

public abstract class Bike
{
  private int cost;

  public Bike(cost){
this.cost=cost;
}
}
1
13th Ghost 17 luty 2017, 04:44