Avatar billede tlunde Nybegynder
18. august 2003 - 11:02 Der er 8 kommentarer og
1 løsning

Hvad er polymorphism?

Hej,
Er der en der kan give en god forklaring på hvad dette er, og hvordan det bruges?

Helst en MEGET god forklaring, da jeg er meget nybegynder i Java...
Avatar billede cpnielsen Nybegynder
18. august 2003 - 11:08 #1
Polymorphism er, når en operator opfører sig forskelligt i forskellige kontekster... F.eks. gælder følgende for + operatoren:

1 + 2              (Heltals addition)
1.0 + 2.0          (Addition af reals)
myString1 + "hej"  (konkatenation af strenge)
Avatar billede bufferzone Praktikant
18. august 2003 - 11:09 #2
polymorphism

In object-oriented programming, polymorphism (from the Greek meaning "having multiple forms") is the characteristic of being able to assign a different meaning or usage to something in different contexts - specifically, to allow an entity such as a variable, a function, or an object to have more than one form. There are several different kinds of polymorphism.
1) A variable with a given name may be allowed to have different forms and the program can determine which form of the variable to use at the time of execution. For example, a variable named USERID may be capable of being either an integer (whole number) or a string of characters (perhaps because the programmer wants to allow a user to enter a user ID as either an employee number - an integer - or with a name - a string of characters). By giving the program a way to distinguish which form is being handled in each case, either kind can be recognized and handled.

2) A named function can also vary depending on the parameters it is given. For example, if given a variable that is an integer, the function chosen would be to seek a match against a list of employee numbers; if the variable were a string, it would seek a match against a list of names. In either case, both functions would be known in the program by the same name. This type of polymorphism is sometimes known as overloading.

In C++, for example, the operator known as the plus sign (+) - which is effectively a simple named function - can be assigned to operate on two objects such that it adds them together (perhaps the most common form of the + operation) or, as in Boolean searching, a + can indicate a logical "and" (meaning that both words separated by the + operator must be present in order for a citation to be returned). In another context, the + sign could mean an operation to concatenate the two objects or strings of letters on either side of the + sign.

A given operator can also be given yet another meaning when combined with another operator. For example, in the C++ language, a "++" following a variable can mean "increment this value by 1". The meaning of a particular operator is defined as part of a class definition. Since the programmer can create classes, the programmer can also define how operators work for this class of objects; in effect, the programmer can redefine the computing language.

3) Polymorphism can mean, as in the ML language, a data type of "any," such that when specified for a list, a list containing any data types can be processed by a function. (For example, if a function simply determines the length of a list, it doesn't matter what data types are in the list.)
Avatar billede arne_v Ekspert
18. august 2003 - 13:01 #3
Java understøtter ikke bruger defineret operator overloading, så det er
ikke noget godt eksempel.
Avatar billede arne_v Ekspert
18. august 2003 - 13:03 #4
Men iøvrigt er hverken operator overload eller metode overload
polymorfisme.
Avatar billede arne_v Ekspert
18. august 2003 - 13:04 #5
Polymorfisme er når man kalder en metode så er der metoden for det instantierede
objekt der bliver kaldt og ikke metoden i den erklærede klasse.
Avatar billede arne_v Ekspert
18. august 2003 - 13:08 #6
Og det er jo noget uforståeligt snak.

Lad os tage et eksempel:

public class PolyM {
    public static void main(String[] args) {
        Parent o = new Child();
        o.something();
    }
}

class Parent {
    public void something() {
        System.out.println("P");
    }
}

class Child extends Parent {
    public void something() {
        System.out.println("C");
    }
}

Hvis Java understøtter polymorfisme udskriver den C.

Hvis Java ikke understøtter polymorfisme udskriver den P.

Og Java understøtter altså polymorfisme !
Avatar billede Slettet bruger
18. august 2003 - 21:02 #7
Java "husker" altså hvilken type objektet som o peger på ér. Og det er denne type (objektets type - her Child), der bestemmer hvilken metode der kaldes.

Det er dog referencens type (her Parent), der bestemmer hvilke metoder der _kan_ kaldes.
Avatar billede arne_v Ekspert
18. august 2003 - 21:04 #8
Ja.
Avatar billede Slettet bruger
25. august 2003 - 18:52 #9
Luk spørgsmålet tlunde.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester