Fordelen ved et interface er at ved at operere på interfaces, så kan man udskifte implementationen uden at ret meget kode påvirkes af det, sålænge den nye implementation bare har det samme interface.
Jeg vil lige supplere Arne's kommentarer med et eksempel jeg lavede engang da jeg var i samme situation som dig - jeg blev selv meget klogere af at lave eksemplet, håber det samme sker for dig.
Lavede også et med interfaces - hvis jeg kan finde det, kaster jeg det her
Abstracte klasser:
/** Dette er et eksempel på polymorphism på et lidt lavere niveau * end det kunne have været, brugen af interfaces ville have bragt * det endnu længere ( det ultimative ), men princippet her er, at man * laver en abstract classe, der extendes af andre classes, hvis sub- * classerne ikke overrider metoden i den abstracte classe, er disse * classer selv abtracte, (en abstract classse kan ikke initieres). * En subclass kan initieres med reference til superclassen, hvilket * gør, at man med reference til superclassen, kan kalde metoder i sub- * classen. Java's JVM beslutter under runtime hvilket object der er * tale om, i dette eksempel et Dog, Cat eller Bird object. * Det er også muligt at lave en class, hvis metode tager en abstract * class som parameter, i eksemplet her classen "WhoKnowsWhatToCome", * denne class aner ikke hvad den modtager som paramter, dog ved den * at den modtager en class som extender en abstract classe der * implementerer metoden snakker(). */
abstract class Polymorphism { abstract void snakker(); }
class Dog extends Polymorphism{ public void snakker(){ System.out.println("Vov - vov - vov"); } }
class Cat extends Polymorphism{ public void snakker(){ System.out.println("Miiau - miiau - miiau"); } }
class Bird extends Polymorphism{ public void snakker(){ System.out.println("Pip - pip - pip"); } }
class WhoKnowsWhatToCome{ public WhoKnowsWhatToCome(Polymorphism subject){ subject.snakker(); } }
public class TestPolymorphism{ public static void main(String[] args){ Polymorphism p; // Reference til den abstracte classe
p = new Dog(); System.out.print("Hunden siger: "); p.snakker();
p = new Cat(); System.out.print("Katten siger: "); p.snakker();
p = new Bird(); System.out.print("Fuglen siger: "); p.snakker();
System.out.println("\nMed classen WhoKnowsWhatToCome der tager" + "en abstract classe som parameter"); System.out.print("Hunden siger: "); new WhoKnowsWhatToCome(new Dog()); System.out.print("Katten siger: "); new WhoKnowsWhatToCome(new Cat()); System.out.print("Fuglen siger: "); new WhoKnowsWhatToCome(new Bird()); } }
Må sige at det er et godt eksempel, men kunne man ikke have lavet Polymorphism klassen som en normal (altså ikke abstract) ? Har endnu ikke helt fået fat i HVORFOR og hvad er betingelserne for at bruge metoder fra en abstract klasse ?
class WhoKnowsWhatToCome{ public WhoKnowsWhatToCome(Polymorphism subject){ subject.snakker(); } } Kan du/i forklare den lidt nærmere ?
public class TestPolymorphism{ public static void main(String[] args){ Animal p; p = new Dog(); p.talks(); p = new Cat(); p.talks(); p = new Bird(); p.talks(); } }
Så fik jeg det afklaret :) Jeg siger tak ! Jeg kan jo altid spørge igen senere hvis der er noget andet jeg er i tvivl :O Synes dog også at carsten skal lave et svar (dog får arne_v største delen af point :)
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.