1 / 23

10 – Interfaces

10 – Interfaces. Abstrakte klasser og interfaces i Java. Indhold. Hvad er en abstrakt metode og en abstrakt klasse? Hvad er et interface? Hvorfor bruge interface? Interface som en type Interface vs. Class Oprette et interface Implementere et interface Implementere flere interface's

tova
Download Presentation

10 – Interfaces

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 10 – Interfaces Abstrakte klasser og interfaces i Java

  2. Indhold • Hvad er en abstrakt metode og en abstrakt klasse? • Hvad er et interface? • Hvorfor bruge interface? • Interface som en type • Interface vs. Class • Oprette et interface • Implementere et interface • Implementere flere interface's • Arv med interface's • Interface og polymorfi • Overskriv et interface

  3. Abstrakte Metoder • Metoder, der ikke er implementeret (har en body) • For at oprette en abstrakt metode tilføjes abstract og {…} udelades. Der afsluttes med ; public abstractvoidsomeMethod();

  4. Abstraktklasse • En abstract klasseer en klassehar en ellerflereabstraktemetoder. Den erklæres med abstract modifier • En abstrakt klasse kan ikke instanseres • Man kan altså ikke bruge new på en abstrakt klasse • En anden klasse er nødt til at arve fra den abstrakte klasse og implementere metoden

  5. Sample Abstract Class public abstract class LivingThing { public void breath(){ System.out.println("Living Thing breathing..."); } public void eat(){ System.out.println("Living Thing eating..."); } public abstract void walk(); } public class Human extendsLivingThing { public void walk(){ System.out.println("Human walks..."); } }

  6. When to use Abstract Methods &Abstract Class? • Abstraktemetoderbrugesnårdetikke giver mening at implementere den isuperklassen. F.eks area i shape. • Samtidigterdetstadigmuligt at genbruge en del afkoden

  7. Hvader et Interface? • Deterstandardliseretog public måde at beskrive en klassesadfærd, dvs. klassens public medlemmer, altsåklassens interface • Interface definerer en kontrakt • Allemetoderi et interface erabstraktemetoder • En konkretklasseskalimplementereinterfacet, dvs. alle de abstraktemetoder. • Interface giver klasser mulighed for at implementere fælles adfærd uanset placering i klasse hierakiet. Og synliggør det for andre klasser.

  8. Eksempel: Interface Relation public interface Relation { public booleanisGreater( Object a, Object b); public booleanisLess( Object a, Object b); public booleanisEqual( Object a, Object b); }

  9. Eksempel2: OperatorCar Interface public interface OperateCar { // constant declarations, if any // method signatures int turn(Direction direction, double radius, double startSpeed, double endSpeed); intchangeLanes(Direction direction, double startSpeed, double endSpeed); intsignalTurn(Direction direction, booleansignalOn); intgetRadarFront(double distanceToCar, double speedOfCar); intgetRadarRear(double distanceToCar, double speedOfCar); ...... // more method signatures }

  10. Hvorforbruge interfaces? • At synliggøre (en del af) en klasses interface uden at gøreimplementationsynlig. • Dvs. detunderstøtterindkabsling • Implementationenkanændresuden at involvere den derkalderinterfacetsmetoder • Brugerenbehøverikke at den implementerendeklassepåkompileringstidspunktet • Den behøver kun at kendeinterfacetpåkompileringstidspunktet • Deterførstpå runtime at den aktuelleobjektinstansbliverknyttetsammen med interfacet

  11. Hvorforbruge interfaces? • Klasser, derikkehørersammenkan have sammeadfærd / metoderuden at den enearverfra den anden • Eksempel: • KlassenLine ogklassenMyInteger • De erikkerelatereretgennemarv • Men de kanimplementeresamme interface • checkIsGreater(Object x, Object y) • checkIsLess(Object x, Object y) • checkIsEqual(Object x, Object y) • Dervedkandet f.eks væremuligt at sorteredem

  12. Hvorfor bruge interfaces? • Modellere mutibel arv. • En klasse kan implementere flere interfaces, men kun arve fra en klasse

  13. Interface vs. abstraktklasse • Allemetoderi et interface erabstrakte, men at ikkeallemetoderi en abstraktklassebehøver at væreabstrakte. • Et interface kan kun definerekonstanter, men en abstraktklassekan have attributter. • Interfaces erikkearv. De eruafhængige • Men interfaces kan indbyrdes arve fra hinanden

  14. Instance som en type • Når et interface defineres, defineres en ny reference type, på samme måde som med en klasse • Interface navne kan bruges på samme måde som klasse navne • Hvis en variabel er erklæret som en instans af et interface, skal den sættes til et objekt af en klasse, der implementerer interfacet • Hvis Person implementerer PersonInterface: • Person p1 = new Person(); • PersonInterface pi1 = p1; • PersonInterface pi2 = new Person();

  15. Defining Interfaces public interface [InterfaceName] { //some methods without the body }

  16. ImplementereInterfaces • For at oprette en klassederimplementerer et interface, brugesimplementskeyword. public class Line implements Relation { private double x1; private double x2; private double y1; private double y2; public Line(double x1, double x2, double y1, double y2){ this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; } // More code follows

  17. public double getLength(){ double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1)); return length; } public booleanisGreater( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen > bLen); } public booleanisLess( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen < bLen); } public booleanisEqual( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen == bLen); } }

  18. Implementeringafinterfaces • Følgendeopstårhvisikkealle interface metodererimplementeret • Line.java:4: Line is not abstract and does not override abstract method isGreater(java.lang.Object,java.lang.Object) in Relation • public class Line implements Relation • ^ • 1 error

  19. Eksempel: Implementeremultiple interfaces • Enkonkretklasseextends eensuper klasse, men kanimplementereflereInterfaces: public class ComputerScienceStudentextends Student implements PersonInterface, AnotherInterface, Third interface { // All abstract methods of all interfaces // need to be implemented. }

  20. Interface arv • Interfaces erikke en del afklassehierarkiet • Men de kan alligevel arve fra andre interfaces public interface PersonInterface { void doSomething(); } public interface StudentInterface extends PersonInterface { void doExtraSomething(); }

  21. Interface ogpolymorfi • Interfaces understøtterpolymorfipå den måde at nårprogrammetkalder en interface metode, vil den rigtigemetodeafhængigtaftypenblivekaldt

  22. Omskrivningaf et eksisterende interface • Her er et interface: public interface DoIt { void doSomething(inti, double x); intdoSomethingElse(String s); } • I en senere version skalinterfacetudvides public interface DoIt { void doSomething(inti, double x); intdoSomethingElse(String s); booleandidItWork(inti, double x, String s); } • Hvis man gørdetkan de gamleklasser, derbrugerinterfacetikkelængerebruges

  23. Løsning public interface DoItPlus extends DoIt { booleandidItWork(inti, double x, String s); } • Nu kan de gamleklasserstadigbrugedetgamle interface, mens de nyeklasserimplementererbådedetnyeogdetgamle

More Related