1723 Stimmen

Was ist der Unterschied zwischen einer abstrakten Methode und einer virtuellen Methode?

Was ist der Unterschied zwischen einer abstrakten Methode und einer virtuellen Methode? In welchen Fällen ist es empfehlenswert, abstrakte oder virtuelle Methoden zu verwenden? Welcher Ansatz ist der beste?

0voto

U.Savas Punkte 109

Hier schreibe ich etwas Beispielcode in der Hoffnung, dass dies ein recht greifbares Beispiel ist, um das Verhalten von Schnittstellen, abstrakten Klassen und normalen Klassen auf einer sehr grundlegenden Ebene zu sehen. Sie können diesen Code auch in Github als Projekt finden, wenn Sie ihn als Demo verwenden möchten: https://github.com/usavas/JavaAbstractAndInterfaceDemo

public interface ExampleInterface {

//    public void MethodBodyInInterfaceNotPossible(){
//    }
    void MethodInInterface();

}

public abstract class AbstractClass {
    public abstract void AbstractMethod();

    //    public abstract void AbstractMethodWithBodyNotPossible(){
    //
    //    };

    //Standard Method CAN be declared in AbstractClass
    public void StandardMethod(){
        System.out.println("Standard Method in AbstractClass (super) runs");
    }
}

public class ConcreteClass
    extends AbstractClass
    implements ExampleInterface{

    //Abstract Method HAS TO be IMPLEMENTED in child class. Implemented by ConcreteClass
    @Override
    public void AbstractMethod() {
        System.out.println("AbstractMethod overridden runs");
    }

    //Standard Method CAN be OVERRIDDEN.
    @Override
    public void StandardMethod() {
        super.StandardMethod();
        System.out.println("StandardMethod overridden in ConcreteClass runs");
    }

    public void ConcreteMethod(){
        System.out.println("Concrete method runs");
    }

    //A method in interface HAS TO be IMPLEMENTED in implementer class.
    @Override
    public void MethodInInterface() {
        System.out.println("MethodInInterface Implemented by ConcreteClass runs");

    //    Cannot declare abstract method in a concrete class
    //    public abstract void AbstractMethodDeclarationInConcreteClassNotPossible(){
    //
    //    }
    }
}

0voto

Maggyero Punkte 4419

Traditional threefold classification of propositions

Abbildung. - Traditionelle Dreiteilung der Sätze.

Unter deontische Logik (die Lehre von der Verpflichtung und der Erlaubnis), ist jeder Satz obligatorisch (Operator "muss"), optional (Operator "kann und darf nicht"), oder unzulässig (Operator "darf nicht"), und kein Satz fällt in mehr als eine dieser drei Kategorien.

Außerdem ist die zulässig ("kann"-Operator) sind Sätze, die obligatorisch oder fakultativ sind, die unzulässig ("darf nicht"-Operator) sind Sätze, die unzulässig oder optional sind, und die nicht fakultativ (Operator "muss oder darf nicht") sind Sätze, die obligatorisch oder unzulässig sind.

Insbesondere ist ein obligatorischer Satz zulässig, und ein unzulässiger Satz ist unzulässig.

Wendet man diese Operatoren auf den Satz "Die Methode wird außer Kraft gesetzt" an, so ergeben sich die folgenden Sätze:

  • abstrakte (reine)/konkrete Methode: die Methode muss überschrieben werden/kann nicht überschrieben werden;
  • virtuelle/reale (finale) Methode: die Methode darf überschrieben werden/ darf nicht überschrieben werden.

Insbesondere ist eine abstrakte Methode virtuell und eine reale Methode konkret.

-4voto

Qaiser Punkte 3

Nach meinem Verständnis:

Abstrakte Methoden:

Nur die abstrakte Klasse kann abstrakte Methoden enthalten. Auch die abgeleitete Klasse muss die Methode implementieren, und in der Klasse ist keine Implementierung vorgesehen.

Virtuelle Methoden:

Eine Klasse kann diese deklarieren und auch die Implementierung derselben bereitstellen. Auch die abgeleitete Klasse muss die Methode implementieren, um sie außer Kraft zu setzen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X