2015-01-17 1 views
5

Ich beobachte dies video, und bei 2.52 gibt es ein Beispiel. Es sagt Shape kann eine oder eine abstrakte Klasse sein und es gibt andere 2 Klassen nämlich Triangle und Circle. Shape hat eine Methode zeichnen.Warum heißt das Polymorphismus?

Jetzt heißt es:

Shape shape=new Triangle(); 
shape.draw(); 

Shape shape=new Circle(); 
shape.draw(); 

und behauptet, dass es Polymorphismus ist.

Aber soweit ich weiß, kann Polymorphismus entweder in Methodenüberladung oder Methodenüberschreibung wie in dieser article angegeben erfolgen.

Kann jemand bitte sagen, ist das Beispiel in dem Video wirklich Polymorphismus gegeben? Vielen Dank im Voraus für jede Art von Hilfe.

+2

Polymorphismus ist, wo eine Elternklasse eine Blaupause für viele Kinderobjekte sein kann. Ein Dreieck und ein Kreis sind beide eine Form und teilen gemeinsame Merkmale, wie die Oberfläche. Eine Person, die eine Elternklasse ist und männlich oder weiblich die Kinderobjekte ist, ist ein weiteres Beispiel für Polymorphie. –

+2

Es ist Polymorphie, weil 'Shape' die Superklasse ist. – Shahar

+0

Mach dir keine Sorgen. Ich habe dir eine positive Bewertung gegeben, weil ich es tatsächlich für eine gute Frage hielt. Willkommen bei Stack Overflow. Das Erlernen unserer Regeln ist ein Prozess und das Heraufrutschen ist menschlich, besonders wenn du neu bist. –

Antwort

0

Es gibt mehrere Möglichkeiten, polymorphe Strukturen in Java zu schreiben. Polymorphismus ist einfach "die Fähigkeit, eine Variable, eine Funktion oder ein Objekt zu erstellen, das mehr als eine Form hat."

Dies ist ein Polymorphismus, da die Methode draw(), offenbar in der übergeordneten Klasse Shape, auch durch mehrere untergeordnete Klassen überschrieben wird: Dreieck und Kreis. So hat draw() mehr als eine Form: die Formen Kreis und Dreieck.

Siehe http://howtodoinjava.com/2013/07/15/what-is-polymorphism-in-java/

0

Polymorphism bedeutet einen Zustand, in vielen verschiedenen Formen zu haben oder die Fähigkeit, auf unterschiedliche Formen zu annehmen. In diesem Sinne kann eine Form viele Formen annehmen, wie zum Beispiel ein Dreieck oder ein Kreis. Diese Formulare würden gemeinsame Eigenschaften haben und als solche codiert und verwendet werden. Als weiteres Beispiel, um besser zu verstehen, können Sie eine Person haben, und eine Person kann mehrere Formen haben: männlich und weiblich.

public abstract class Person { 
    private String name; 
    private int age; 
    //additional code - functionalities that children classes share 
} 

public class Male extends Person { 
    //fields and functionalities that males only have 
} 

public class Female extends Person { 
    //fields and functionalities that females only have 
} 

Sie können dann erstellen Sie das Geschlecht Sie durch dynamische Bindung wollen:

Person male = new Male(); 
Person female = new Female(); 

Um Ihre Frage zu beantworten, ja, das Beispiel zur Verfügung gestellt ist in der Tat Polymorphismus.

0

Dreieck und Kreis werden beide von der Shape-Klasse geerbt. Die Formklasse kann Objekte von Unterklassen enthalten. also Polymorphie ist da. du kannst sagen Dreieck t = neues Dreieck(); und Kreis c = neuer Kreis();

Aber hier haben Sie eine Superklasse, die das Subklassenobjekt Shape s = new Circle() hält; Polymorphismus - mit vielen Formen,

0

Polymorphismus bedeutet, dass ein Objekt mehrere Formen annehmen kann. Sie können sagen Shape a = neues Dreieck(), weil ein Dreieck IS-A-Form (Dreieck erweitert Form). Sie können auch Shape a = new Circle() sagen, weil ein Circle IS-A Shape (Kreis erweitert Shape) ist. In der ersten Zeile Ihres Beispiels ruft die JVM die draw() -Methode aus der Triangle-Klasse auf. In der zweiten Zeile wird die Methode draw() aufgerufen, die in der Circle-Klasse definiert ist, und zwar unter Verwendung einer Shape-Referenz!

abstract class Shape { 
    public abstract void draw(); 
} 

class Triangle extends Shape { 

    @Override 
    public void draw() { 
     System.out.println("Triangle"); 
    } 
} 

class Circle extends Shape { 

    @Override 
    public void draw() { 
     System.out.println("Circle draw"); 
    } 
} 
0

Gehen Sie nicht zuerst zu technisch, versuchen Sie, von der Bedeutung zu verstehen. Bedeutung von Polymorphismus in OOP ist die Fähigkeit von Objekten, sich anders zu verhalten.kann jetzt denken, wie Methode Polymorphismus

Methode Overloading ist Polymorphismus

In OOP Methode dar Überlastung stellt ein Verhalten, Technik in Java unter Verwendung von Verfahren zu überlasten Sie eine Methode erstellen können die den gleichen Namen aber unterschiedliche Parameter haben Liste, jetzt lasst uns anfangen zu denken .. der gleiche Name bedeutet -> das gleiche Verhalten, aber wir wissen, obwohl der Name ähnliches Verhalten ist nicht genau das gleiche .. in einfachen Worten polymorph

Beispiel: Sie haben essen Methode in der menschlichen Klasse Jetzt erstellen Sie eine andere Ess-Methode mit anderen Parameterliste, nach welcher Methode Sie erwartete Verhaltensänderungen aufrufen.

Methode überschrieben ist Polymorphism

dann, wie Verfahren überwiegendes Polymorphismus ist? Versuchen wir es herauszufinden. In Methodenüberschreibung überschreiben Sie eine Methode, die in der Superklasse definiert ist.

Ex: Human hat ein Verfahren essen, und Sie nun eine übermenschliche Klasse erstellen, die eine Unterklasse des Menschen ist und dann das Essen außer Kraft setzt Methode

so wissen wir, dass übermenschlich auch Fähigkeit, aber anders essen zu haben, aber nicht wie Überladen jetzt hier haben wir ein Problem, den Polymorphismus zu demonstrieren. Warum, denn wenn Sie eine Instanz von human erstellen, gibt es eine Methode, also gibt es kein polymorphes Verhalten. Genau wie wenn Sie eine Instanz von SuperHuman erstellen, dann gibt es eine Methode und ein erwartetes Verhalten, also gibt es keinen Polymorphismus. so ist dies, wie wir zeigen

Human a = new Human(); 
a.eat(); 
Human b = new SuperHuman(); 
b.eat(); 

wir können nicht einfach sagen, welche Methode funktioniert die Ausgabe von nur an der linken Seite suchen, weil beide „a“ und „b“ ist Menschentyp so Compiler nicht sicher sein kann, Was wird die Ausgabe von a.eat() und b.eat() sein, bis Code tatsächlich läuft, so ist es polymorph.