Frage

Hallo, ich möchte nur sicherstellen, dass ich diese Begriffe richtig. Eine Überlastung in Java bedeutet, dass Sie einen Konstruktor oder eine Methode mit einer unterschiedlichen Anzahl von Argumenten oder verschiedene Datentypen haben können. das heißt

public void setValue(){
   this.value = 0;
}
public void setValue(int v){
   this.value = v;
}

Wie wäre es dieser Methode? Wäre es nach wie vor Überlastung betrachtet werden, da es einen anderen Datentypen Rückkehr?

public int setValue(){
   return this.value;
}

Die zweite Frage ist: Was ist zwingende  in Java? Bezieht es auf Erbschaft. Lassen Sie uns habe ich die folgenden:

public class Vehicle{
  double basePrice = 20000;
  //constructor defined
  public double getPrice(){
     return basePrice;
   }
}

public class Truck extends Vehicle{
  double truckPrice = 14000;
  //constructor defined
  public double getPrice(){
     return truckPrice;
   }
}

So, jetzt lassen Sie uns sagen, ich habe folgendes

Truck truck = new Truck();

wenn ich rufe

truck.super.getPrice()

Dies würde den Preis von der Fahrzeugklasse zurückkehren, 20.000

wenn ich rufe

truck.getPrice()

Dies würde den Preis in der Lkw-Klasse zurückkehren, 14000

Ist mein Wissen und Gewissen richtig für beide Fragen?

War es hilfreich?

Lösung

Sie sind grundsätzlich richtig. Überladen ist mit mehreren Verfahren, die in einer einzigen Klasse, wo das Verfahren die gleichen Namen hat. Allerdings wird der Rückgabewert nicht als Teil des Signatur des Verfahrens gesehen. So können Sie eine Methode nicht überlasten, indem nur den Rückgabewert zu ändern. Sie können den folgenden Code nicht haben, aus Ihrem Beispiel:

public void setValue() {
   this.value = 0;
}

public int setValue() {
   return this.value;
}

Dies wird nicht kompiliert.

Als Rob identifiziert, ich glaube, Sie bedeuten Überschreiben , und Sie haben das richtig. Hinweis mit Überschreiben Sie nicht den Rückgabetyp ändern können. Ab Java 5 können Sie eine abgeleitete Art von zurückgeben, was die Basisklasse Methode zurückgegeben. Vor Java 5, muss es der gleiche Typ sein. Das heißt, können Sie die unten bis Java 5 und später nicht tun:

public class AnimalNoise {}
public class Miaw extends AnimalNoise {}

public class Animal {
    public AnimalNoise makeNoise() {
        return new AnimalNoise();
    }
}

public class Cat extends Animal {
    public Miaw makeNoise() {
        return new Miaw ();
    }
}

Aber auch in Java 5 und höher, Sie kann nicht wie folgt vor:

public class Animal {
    public String makeNoise() {
        return "silence";
    }
}

public class Cat extends Animal {
    public Miaw makeNoise() {
        return new Miaw ();
    }
}
public class Miaw {}

Schließlich ist ein großer Unterschied zwischen Überlastung und Überschreiben, die oft übersehen wird, ist, dass eine Überlastung bei der Kompilierung entschieden wird, und überwiegende wird zur Laufzeit entschieden. Dies fängt viele Leute überrascht, wenn sie erwarten Überlastung zur Laufzeit entschieden werden.

Andere Tipps

Richtig; Überlastung ist mehrere Signaturen für das gleiche Verfahren bereitgestellt wird.

Übergeordnete, das ist, was ich denke du meinst durch „Überschreiben“ ist der Akt des eine andere Implementierung eines Verfahrens von einem Basistyp geerbt Bereitstellung und ist im Grunde der Punkt des Polymorphismus durch Vererbung, d.

public class Bicycle implements Vehicle {
    public void drive() { ... }
}

public class Motorcycle extends Bicycle {
    public void drive() {
        // Do motorcycle-specific driving here, overriding Bicycle.drive()
        // (we can still call the base method if it's useful to us here)
    }
}

, was Sie beschrieben haben, ist richtig.

Für weitere Klärung einen Blick auf Polymorphismus Konzept nehmen. Die Wikipedia hat einen guten Artikel

http://en.wikipedia.org/wiki/Polymorphism#Computing

http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top