Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.



Relevanta dokument
Kort om klasser och objekt En introduktion till GUI-programmering i Java

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Objektorienterad Programmering (TDDC77)

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

SMD 134 Objektorienterad programmering

TUTORIAL: KLASSER & OBJEKT

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

Grundläggande programmering med C# 7,5 högskolepoäng

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

TDDC77 Objektorienterad Programmering

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Parameteröverföring. Exempel. Exempel. Metodkropp

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Klassdeklaration. Metoddeklaration. Parameteröverföring

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

TENTAMEN OOP

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

LÖSNINGSFÖRSLAG TENTAMEN

Classes och Interfaces, Objects och References, Initialization

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Tentamen OOP

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen ID1004 Objektorienterad programmering October 29, 2013

TDDC77 Objektorienterad Programmering

Föreläsning 3-4 Innehåll

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

TENTAMEN OOP

Föreläsning 5-6 Innehåll

LÖSNINGSFÖRSLAG TENTAMEN

Användarhandledning Version 1.2

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

TENTAMEN OOP

JAVA Mer om klasser och objektorientering

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Chapter 3: Using Classes and Objects

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Laboration 1 - Grunderna för OOP i Java

Objektorienterad Programmering (TDDC77)

Objektorienterad programmering i Java

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Föreläsning 2, vecka 8: Repetition

Programmeringsteknik med C och Matlab

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Malmö högskola 2007/2008 Teknik och samhälle

Objektorienterad Programmering (TDDC77)

Programmering A. Johan Eliasson

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Programmering B med Visual C

Objektorienterad programmering i Java

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Anteckningar 1: Grundläggande saker

Att skriva till och läsa från terminalfönstret

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Programmering för språkteknologer I, VT2012. Rum

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Design av interaktiv multimedia. Läs i förväg om det som övningarna kommer att beröra. Träna hemma både före och efter övningarna.

Objektorienterad programmering Föreläsning 4

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

Lektion Java Grunder. Javas historia. Programmeringsspråket Java. Skillnaderna mellan Java och C++ JVM (Javas Virtuella Maskin)

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

Chapter 4: Writing Classes/ Att skriva egna klasser.

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Tentamen ID1004 Objektorienterad programmering December 15, 2012

Tentamen ID1004 Objektorienterad programmering April 7, 2015

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

TDIU01 - Programmering i C++, grundkurs

Programmering för språkteknologer II, HT2011. Rum

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Övning2. Variabler. Data typer

Föreläsning 3: Booleans, if, switch

Transkript:

TT Kapitel 3. Husdjur & Fisk Javaklasser Translation by Leif Lourié Java program består av klasser som beskriver saker (objekt) som finns på riktigt. Även om det finns många olika sätt att skriva program på, så är de flesta överens om att objektorienterad programmering är det bästa sättet. Detta betyder att duktiga programmerare börjar med att bestämma vilka objekt som ska finnas i programmet och vilka Javaklasser som ska beskriva dessa. Först därefter sätter de igång med att skriva Java kod. Klasser och Objekt Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen. Låt oss skapa en klass kallad DataSpel. Denna klass kan ha flera metoder som beskriver vad objekt av denna klass kan göra:

starta spelet, stoppa spelet, spara poäng och så vidare. Denna klass kan även ha egenskaper: pris, skärm, färg, antal handenheter, etc. I Java skulle denna klass kunna se ut så här: class DataSpel { String farg; int price; void startaspel() { void stoppaspel() { void sparapoang(string spelarensnamn, int poang) { Vår klass DataSpel borde likna andra klasser som beskriver dataspel alla har skärmar med olika storlekar och färg, alla utför liknande funktioner och alla kostar pengar.

Vi kan vara mer exakta och skapa en annan Javaklass kallad GameBoyAdvance. Den är också av typen dataspel, men har en del egenskaper som är speciella för modellen GameBoy Advance, till exempel kassettsort. class GameBoyAdvance { String kasettsort; int skarmstorlek; void startaspel() { void stoppaspel() { I denna klass, GameBoyAdvance, finns det två egenskaper kasettsort och skarmstorlek och två metoder startaspel() och stoppaspel(). Men dessa metoder kan inte utföra något ännu eftersom de inte innehåller någon Java kod. Förutom ordet klass, måste du vänja dig vid att använda ordet objekt. Meningen att skapa en instans av en klass betyder att skapa en kopia i datorns minne, ett objekt, som följer beskrivningen för klassen. En konstruktionsritning för en GameBoy Advance beskriver den egentliga spelmaskinen på samma sätt som en Javaklass beskriver den instans av objektet som finns i datorns minne. Processen att bygga spelmaskiner i fabriken baserat på ritningen liknar processen att skapa objektinstanser från klassen GameBoy i Java.

I de flesta fall kan man inte använda en Javaklass förrän man har skapat en instans av denna. På samma sätt som speltillverkaren tillverkar tusentals spelmaskiner utifrån samma beskrivning. Fastän varje kopia är en instans av samma klass så kan de ha olika egenskaper (olika värden i sina medlemsvariabler) en del är blåa medan andra är silverfärgade och så vidare. Med andra ord, ett program kan skapa flera instanser av GameBoyAdvance. Datatyper Variabler används för att beskriva klassens egenskaper, parametrar till metoder eller för tillfällig lagring av information. Variabler måste deklareras innan du kan använda dem.

Låt oss titta på den matematiska formeln y=x+2. I Java så måste du deklarera variablerna x och y som någon form av numerisk datatyp, exempelvis integer eller double: int x; int y; De följande två raderna visar hur du kan tilldela värden till dessa variabler. Om ditt program tilldelar värdet fem till variabeln x, så kommer det att leda till att variablen y blir sju: x=5; y=x+2; I Java kan du även ändra värdet i en variabel på ett lite speciellt sätt. I de följande två raderna deklareras först variabeln y som en integer och sätts till värdet fem varefter denna ändras från fem till sex: int y=5; y++; De två plustecknen betyder att värdet i variabeln y ökas med ett. Även i de följande två kodraderna kommer värdet i variabeln minpoang att vara sex: int minpoang=5; minpoang=minpoang+1; Du kan även använda multiplikation, division och subtraktion på samma sätt. Titta på den följande koden: int minpoang=10; minpoang--; minpoang=minpoang*2; minpoang=minpoang/3; System.out.println("Min poäng är " + minpoang)vad den här koden skriver ut? Eclipse har en bra funktion kallad scrapbook

som hjälper dig att testa kodsnuttar (som den här ovanför) utan att du behöver skriva ett fullständigt program. Välj menyn File, New, Other och välj Scrapbook Page enligt nedan: Skriv ordet Test som namn på din scrapbook fil. Skriv sedan in de fem raderna som ändrar minpoang i scrapbook, markera dem och klicka på det lilla förstoringsglaset som finns i verktygsraden.

För att se resultatet av beräkningen, klicka på fliken som heter console, längst ner på skärmen: Min poäng är 6 I detta exempel är indatat till metoden println() sammansatt av två delar texten Min poäng är och värdet för variabeln minpoang, som är sex. Att skapa en Sträng genom att sätta samman flera delar kallas konkatenering. Även om minpoang är ett nummer, så är Java tillräckligt smart för att göra om värdet till en Sträng, och sätta samman den med texten Min poäng är. Några exempel på hur du kan ändra värdet på variabler: minpoang=minpoang*2; är detsamma som minpoang*=2; minpoang=minpoang+2; är detsamma som minpoang+=2; minpoang=minpoang-2; är detsamma som minpoang-=2; minpoang=minpoang/2; är detsamma som minpoang/=2; Det finns åtta enkla, eller primitiva datatyper i Java och du måste bestämma vilken du ska använda beroende på vilken sorts information och vilken storlek på informationen du vill lagra i dina variabler:

Fyra datatyper för att lagra numeriska värden byte, short, int, och long. Två datatyper för att lagra decimala värden float och double. En datatyp för att lagra enstaka tecken char. En logisk datatyp kallad boolean som bara tillåter två möjliga värden: true eller false. (sant eller falskt) Du kan sätta ett startvärde i variablen redan när du deklarerar den. Detta kallas att initiera variabeln: char betyg = 'A'; int antalstolar = 12; boolean spelamusik = false; double inkomst = 23863494965745.78; float pris = 12.50f; long totaltantalbilar =4637283648392l; I slutet på de två sista raderna ser du ett f som betyder float och ett l som betyder long. Om du inte initierar variablerna så kommer Java att göra det ändå genom att sätta numeriska variabler till noll, boolska variabler till false och char variabler får specialvärdet \u0000. Om du använder det speciella nyckelordet final när du deklarerar en variabel så betyder det att du bara kan sätta ett värde i denna variabel en gång och sedan aldrig ändra den. Denna typ av variabel kallas ofta för konstant. I Java rekommenderar vi att du använder stora bokstäver när du namnsätter konstanter: final String HUVUDSTAD="Stockholm";

Förutom primitiva datatyper så kan du använda Javaklasser för att deklarera variabler. Varje primitiv datatyp har en motsvarande wrapper klass, till exempel Integer, Double, Boolean, etc. Dessa klasser innehåller metoder för att konvertera data från en datatyp till en annan. Den primitiva datatypen char används ju för att lagra ett tecken, men Java har även klassen String som används för att arbeta med textsträngar, till exempel: String efternamn="andersson"; I Java så kan ett variabelnamn inte börja med en siffra och inte innehålla mellanslag. Dessutom så kan våra speciella svenska tecken inte användas i Java kod. Så Å, Ä, Ö kan inte användas i variabelnamn, metodnamn eller klassnamn. Däremot kan kommentarer och textsträngar innehålla svenska tecken.

En bit är den minsta delen data som kan lagras i datorns minne. Den kan innehålla antingen 1 eller 0. En byte består av åtta bitar. En char, i Java, använder två byte i minnet. En int och en float använder fyra byte vardera. En long och en double använder åtta byte vardera. Numeriska datatyper som använder fler byte kan lagra större tal. 1 kilobyte (KB) består av 1024 bytes 1 megabyte (MB) består av 1024 kilobyte 1 gigabyte (GB) består av 1024 megabyte Att skapa ett Husdjur Låt oss skapa en klass för Husdjur. Först ska vi bestämma vad husdjuret ska kunna göra. Vad sägs om att äta, sova och prata? Vi kommer att programmera in detta i metoderna för klassen Husdjur. Vi ska även ge vårt husdjur följande egenskaper : ålder, längd, vikt och färg. Börja med att skapa en ny Javaklass kallad Husdjur i My First Project som finns beskrivet i Kapitel 2, men klicka inte i boxen för att skapa metoden main().

Din skärm borde se ut ungefär som nedan: Nu är vi redo att deklarera attribut och metoder i vår klass, Husdjur. Javaklasser och metoder har sin kod mellan måsvingar. Varje måsvinge i början av en klass eller metod måste ha en motsvarande måsvinge i slutet: class Husdjur{ När vi ska deklarera attributen för vår klass så måste vi bestämma vilka datatyper som vi ska använda. Jag föreslår en int för ålder, float för vikt och längd samt String för husdjurets färg.

class Husdjur{ int alder; float vikt; float langd; String farg; Om du kommer ihåg, så kan vi inte använda våra speciella svenska tecken i Javakod. I koden står det därför alder istället för ålder, langd istället för längd och farg istället för färg. Nästa steg är att lägga till metoder till klassen. Innan du deklarerar metoder måste du bestämma om de ska ha några inparametrar och om de ska returnera någonting: Metoden sova() ska bara skriva ut meddelandet God natt, vi ses imorgon den behöver inte några inparametrar och kommer inte att returnera någonting. Detsamma gäller för metoden för att äta ata(). Den ska skriva ut meddelandet Jag är så hungrig... Mata mig! Metoden prata() ska också skriva ut ett meddelande, men husdjuret kommer att säga (skriva) det ord eller läte som vi talar om för det. Vi kommer att skicka med det ordet till metoden prata() som en inparameter. Metoden ska bygga ihop lätet med denna inparameter och returnera detta till det anropande programmet.

Så nu ser klassen Husdjur ut så här: public class Husdjur { int alder; float vikt; float langd; String farg; public void sova(){ System.out.println( "God natt, vi ses imorgon"); public void ata(){ System.out.println( "Jag är så hungrig... Mata mig!"); public String prata(string ettord){ String svar = "OK!! OK!! " + ettord; return svar; Den här klassen beskriver ett gulligt djur som finns i den verkliga världen:

Låt oss titta närmare på signaturen för metoden sova(): public void sova() Den säger oss att denna metod kan anropas från vilket annat Java program som helst (public) och att metoden inte returnerar något data (void). De två paranteserna utan något emellan betyder att metoden inte har några parametrar, eftersom den inte behöver något extra data den skriver alltid samma text. Signaturen för metoden prata() ser ut så här: public String prata(string ettord) Även den här metoden kan anropas från andra Java program men kommer att returnera en text eftersom nyckelordet String finns framför metodnamnet. Dessutom förväntar sig metoden att få data i form av text i parametern String ettord. Hur bestämmer man om en metod ska returnera ett värde eller inte? Om metoden utför någon form av förändring av datat och behöver skicka tillbaka någonting till den som anropar så måste den returnera detta. Men klassen Husdjur har ju ingen som anropar! Det är riktigt, så låt oss då skapa en ny klass Husse (eller Matte). Denna klass har en metod main() som innehåller

kod för att prata med klassen Husdjur. Använd Eclipse och skapa ännu en klass, kallad Husse, och denna gång klicka för valet att skapa metodsen main(). Kom ihåg, utan denna metod kan du inte köra klassen som ett program. Ändra koden som genereras av Eclipse så att den ser ut så här: public class Husse { public static void main(string[] args) { Husdjur mitthusdjur = new Husdjur(); String reaktion; mitthusdjur.ata(); reaktion = mitthusdjur.prata("tweet!! Tweet!!"); System.out.println(reaktion); mitthusdjur.sova(); Glöm inte att slå Ctrl-S för att spara och kompilera klassen! För att köra klassen Husse klicka på Eclipse menyn Run, Run, New och skriv namnet på klassen: Husse. Klicka på knappen Run och programmet kommer att skriva följande: Jag är så hungrig... Mata mig! OK!! OK!! Tweet!! Tweet!! God natt, vi ses imorgon Husse är den anropande klassen och startar med att skapa en instans av Husdjur genom att deklarera variabeln mitthusdjur och använder sedan Java kommandot new: Husdjur mitthusdjur = new Husdjur();

Denna rad deklarerar en variabel av typen Husdjur (precis... du kan använda alla klasser i Java som vilken datatyp som helst). Nu vet variabeln mitthusdjur var instansen av Husdjur finns i datorns minne och du kan använda variabeln för att anropa metoderna som finns i klassen, till exempel: mitthusdjur.ata(); Om metoden returnerar ett värde måste du anropa den på ett litet annorlunda sätt. Deklarera en variabel som är av samma typ som det värde som returneras och anropa sedan metoden på följande sätt: String reaktion; reaktion = mitthusdjur.prata("tweet!! Tweet!!"); Efter de här kodraderna har det returnerade värdet lagrats i variabeln reaktion och titta gärna på vad som finns där: System.out.println(reaktion);

Arv en Fisk är också ett Husdjur Vår klass Husdjur ska hjälpa oss att förstå ännu en viktig del av Java kallat arv. I det verkliga livet ärver varje människa olika egenskaper från sina föräldrar. På samma sätt kan man i Java skapa en ny klass baserad på en annan. Klassen Husdjur har beteende och egenskaper som är desamma för många husdjur de äter, sover, en del av dem låter, de har olika färg och så vidare. Å andra sidan, husdjur är olika hundar skäller, fiskar simmar och låter inte, papegojor talar bättre än hundar. Men alla äter, sover, har vikt och längd. Därför är det enklare att skapa klassen Fisk och låta den ärva gemensamma beteenden och egenskaper från klassen Husdjur, istället för att skapa Hund, Papegoja eller Fisk från grunden varje gång. Det speciella nyckelordet extends är det som fixar arvet: class Fisk extends Husdjur{ Man kan säga att Fisk är en subklass av klassen Husdjur och att Husdjur är en superklass för klassen Fisk. Med andra ord så använder du klassen Husdjur som mall för att skapa klassen Fisk. Även om du inte gör något mer med klassen Fisk så kan du ändå använda alla metoder och egenskaper som har ärvts från klassen Husdjur. Kolla här: Fisk minlillafisk = new Fisk();

minlillafisk.sova(); Fast vi inte har deklarerat några metoder i klassen Fisk så kan vi använda metoden sova() i dess superklass! Att skapa subklasser i Eclipse är superenkelt! Välj menyn File, New, Class, och skriv Fisk som klassnamn. Byt ut java.lang.object i fältet superclass mot Husdjur. Men kom ihåg att syftet med att skapa en subklass från Husdjur är att lägga till det som är speciellt för fiskar och återanvända den koden som är gemensam för alla husdjur. Det är dags att avslöja en hemlighet - alla klasser i Java ärver från en super-duper klass kallad Object, oavsett om du använder ordet extends eller inte.

Men Javaklasser kan inte ha två föräldrar. Om detsamma gällde för människor så hade barnen inte varit subklasser av sina föräldrar. Alla pojkar hade ärvt alla egenskaper från Adam och alla flickor hade varit subklasser av Eva. :) Alla husdjur kan inte dyka men fiskar är jätteduktiga på det. Låt oss lägga till metoden dyka() i klassen Fisk. public class Fisk extends Husdjur { int djup=0; public int dyka(int hurdjupt){ djup = djup + hurdjupt; System.out.println("Dyker ner " + hurdjupt + " meter"); System.out.println("Jag är " + djup + " meter under ytan "); return djup; Metoden dyka() har en parameter hurdjupt som anger hur många meter till som fisken ska dyka ner. Vi har även deklarerat en klassvariabel, djup, som innehåller information om djupet som fisken befinner sig på. Denna variabel kommer att uppdateras varje gång du anropar metoden dyka(). Dessutom returnerar metoden värdet på variabeln djup till det anropande programmet. Skapa nu en ny klass, FiskMatte som ser ut så här:

public class FiskMatte { public static void main(string[] args) { Fisk minfisk = new Fisk(); minfisk.dyka(2); minfisk.dyka(3); minfisk.sova(); Metoden main() instansierar objektet Fisk och anropar metoden dyka() två gånger med olika värden. Därefter anropas metoden sova(). När du kör programmet FiskMatte skrivs följande meddelanden ut: Dyker ner 2 meter Jag är 2 meter under ytan Dyker ner 3 meter Jag är 5 meter under ytan God natt, vi ses imorgon Har du tänkt på att förutom metoden dyka() som finns i klassen Fisk så anropar FiskMatte även metoden sova() som finns i superklassen Husdjur? Det är det som är poängen med arv du behöver inte kopiera koden som finns i klassen Husdjur använd bara ordet extends så kan klassen Fisk använda Husdjurets metoder!

En sak till, även om metoden dyka() returnerar värdet för djup så använder inte vår FiskMatte detta. Det är helt okej! Vår FiskMatte behöver inte värdet men det kan finnas andra program som också använder Fisk och de kanske kommer att tycka det är viktigt. Tänk om klassen FiskTrafikKontroll skapades för att godkänna om fisken fick dyka till ett visst djup. Den klassen skulle behöva veta var fiskarna fanns på för djup för att kunna undvika traffikolyckor.. Överlagring av metoder Som du vet så pratar inte fiskar (åtminstone inte så vi hör det). Men vår klass Fisk har ärvt metoden prata() från klassen Husdjur. Det betyder att du du skulle kunna skriva kod på det här viset: minfisk.prata(); Hoppsan, vår fisk började prata Om du inte vill att detta ska vara möjligt så måste klassen Fisk överlagra Husdjurets metod

prata(). Det gör du genom att i subklassen skapa en metod med exakt samma signatur som i superklassen. Då kommer subklassens metod att användas istället för den som finns i superklassen. Låt oss lägga till metoden prata() i klassen Fisk. public String prata(string blaha){ return "Men hörru! Fiskar kan ju inte prata."; Lägg nu till följande metodanrop i klassen FiskMatte: minfisk.prata("hejsan"); När du kör programmet så kommer det att skriva ut: Men hörru! Fiskar kan ju inte prata. Detta visar att Husdjurets method prata() har överlagrats, eller med andra ord, ersatts. Om en metod är deklarerad som final, så kan denna metod inte överlagras, till exempel: final public void sova(){ Oboy! Vi har verkligen lärt oss en massa i det här kapitlet nu är vi värda en rast!

Mera Läsning 1.Java Datatyper: TUThttp://java.sun.com/docs/books/tutorial/j ava/nutsandbolts/datatypes.htmlutt 2.Om Arv: TUThttp://java.sun.com/docs/books/tutorial/java/concepts/i nheritance.htmlutttt Övning 1. Skapa en ny klass kallad Bil med följande metoder: public void starta() public void stanna() public int gasa(int enstund) Metoden gasa() ska returnera hur långt bilen har kört efter en stund. Använd denna formel för att räkna ut hur långt bilen kör: antalkilometer = enstund * 60; 2. Skapa sedan en klass för den som äger bilen BilAgare som skapar en instans av Bil och anropar metoderna. Resultaten från dessa metodanrop måste skrivas ut med hjälp av System.out.println().

Övning för smartskallar Skapa en subklass av Car kallad JamesBondCar och överlagra metoden drive() i denna. Använd följande formel för att räkna ut sträckan: antalkilometer = enstund * 180; Var kreativ. Skriv ut lite roliga meddelanden!