150 likes | 363 Views
GRUNDKURS I PROGRAMMERING MED JAVA. Föreläsning 8 (15.1.2008) INNEHÅLL: Att definiera egna klasser i skilda filer Instanser av klasser Instansvariabler Instansmetoder . Att definiera egna klasser i skilda filer.
E N D
GRUNDKURS I PROGRAMMERING MED JAVA Föreläsning 8 (15.1.2008) INNEHÅLL: Att definiera egna klasser i skilda filer Instanser av klasser Instansvariabler Instansmetoder Jonny Karlsson 15.1.2008
Att definiera egna klasser i skilda filer Exempel: Vi vill definiera en biblioteksklass som innehåller matematiska konstanter vilka vi vill komma åt från en annan klass class Konstanter //definierar en ny klass som heter Konstanter { static float pi = 3.14; static float gravitation = 9.8; } Denna klass sparas i en egenfil: konstanter.java Observera att denna fil behöver nödvändigtvis inte heta just konstanter.java eftersom den inte är en huvudklass och inte innehåller en huvudmetod (main) Jonny Karlsson 15.1.2008
Att definiera egna klasser i skilda filer Nästa steg är att kompilera ”biblioteksfilen” konstanter.java vi får en fil klassfil: konstanter.class Nu är konstanterna i konstanter.class åtkomliga från vilken som helst annan klass vars klassfil finns lagrad i samma katalog som konstanter.class public class program { public static void main(String args[ ]) { System.out.println(”Värdet för pi är: ” + Konstanter.pi); System.out.println(”Värdet för pi gravitationen är: ” + Konstanter.gravitation); } } Jonny Karlsson 15.1.2008
Instanser av klasser Man kan utnyttja klasser som samling av metoder och egenskaper = biblioteksklasser (detta gick vi igenom förra gången). Man kan också använda klasser för att definiera en typ av objekt, t.ex. egenskaper hos en person, bil, båt osv... Ett objekt som hör till en viss klass kallas för en instans eller ett objekt av klassen. En instans eller ett objekt av en klass är i praktiken en variabel som är av typen en viss klass. Jonny Karlsson 15.1.2008
Instanser av klasser Exempel: String s; En ny variabel s deklareras ovan som är av typen String. String är en klass som definierar strängar och s blir nu ett nytt objekt eller en instans av klassen String. String är ett exempel på en klass som finns färdigt definierad i Java. Jonny Karlsson 15.1.2008
Instanser av klasser Exempel2: String s, s2; Två nya variablerl s och s2 deklareras ovan som är av typen String. s och s2 är nu två skilda objekt / instanser av klassen String. s och s2 innehåller alla de egenskaper (variabler och metoder) som finns i klassen String s och s2 är två enskilda variabler av typen String Jonny Karlsson 15.1.2008
Instansvariabler och instansmetoder En klass kan innehålla bl.a. klassvariabler, instansvariabler, klassmetoder och Instansmetoder. Förra gången jobbade vi med klasser som innehöll klassvariabler och klassmetoder Nu ska vi gå igenom instansvariabler och instansmetoder Jonny Karlsson 15.1.2008
Instansvariabler Exempel: Vi behöver ett program som hanterar olika egenskaper av en person. Dessa egenskaper kan för enkelhetens skull nu vara endast födelseår och namn. Då skulle vi deklarera en ny klass för människa med två instansvariabler födelseår (int) och namn (String): class Person //definierar en ny klass som heter Person { int fodelsear; //instansvariabel String namn; //instansvariabel } Observera att variablerna fodelsear och namn INTE är statiska Jonny Karlsson 15.1.2008
Instansvariabler Att variablerna fodelsear och namn INTE är statiska betyder att det kan existera flera olika exemplar / kopior av dem som är totalt oberoende av varandra. Vi kan därför av klassen Person skapa flera olika instanser / objekt: Person p1 = new Person(); //skapar ett nytt objekt p1 av klassen Person Person p2 = new Person(); //skapar ett nytt objekt p2 av klassen Person p1 och p2 är nu objekt / instanser av klassen Person. I detta fall betyder det i praktiken att variablerna p1 och p2 innehåller två egenskaper: födelseår och namn Jonny Karlsson 15.1.2008
Instansvariabler Observera också att eftersom variablerna i klassen Person inte är statiska kan vi inte komma åt dessa variabler direkt via klassnamnet på samma sätt som klassvariabler. Vi måste i stället skapa ett objekt / en instans av klassen Person och sen kommer vi åt instansvariablerna via objektet m.h.a punktnotation: Person p1 = new Person(); //skapar ett nytt objekt p1 av klassen Person Person p2 = new Person(); //skapar ett nytt objekt p2 av klassen Person p1.fodelsear; p1.namn; p2.fodelsear; p2.namn; Jonny Karlsson 15.1.2008
Instansvariabler public class program { public static void main(String args[ ]) { Person p1 = new Person(); Person p2 = new Person(); p1.fodelsear = 1979; p1.namn = ”Kalle”; p2.fodelsear = 1983 p2.namn = Ville; System.out.println(p1.namn+” ar fodd ”+p1.fodelsear+” och ”+p2.namn+” ar fodd ”+p2.fodelsear); } } class Person //definierar en ny klass som heter Person { int fodelsear; //instansvariabel String namn; //instansvariabel } Jonny Karlsson 15.1.2008
Instansmetoder Som vi tidigare konstaterat, använder man instansvariabler för att beskriva eganskaper hos en viss instans / ett visst objekt av en viss klass. Ett objekt/en instans av en klass har normalt inte endast olika tillstånd utan även ett visst beteende. M.a.o instanser av klasser kan ofta även utföra vissa operationer. Dessa operationer definieras som instansmetoder. En instansmetod är helt enkelt en helt vanlig metod som definieras inne i en klassdefinition. En metod definierad inne i en klass som inte är markerad som static, är en instansmetod. Jonny Karlsson 15.1.2008
Instansmetoder Exempel: Vi vill definiera en klass som innehåller egenskaper för en bil: märke och Årsmodell. Vi vill också att ett objekt / en instans som skapas av klassen bil skall ha två beteenden: • Beteende1 – Visa bilens märke och årsmodell • Beteende2 – Be användaren mata in märke och årsmodell för en viss bil Jonny Karlsson 15.1.2008
Instansmetoder class Bil { int arsmodell; //instansvariabel String marke; //instansvariabel void visaEgenskaper() //instansmetod { System.out.println(”Marke: ” + marke); System.out.println(”Arsmodell: ” + arsmodell); } void inmataEgenskaper() //instansmetod { System.out.print(”Ge marke: ”); marke = input.readString(); System.out.print(”Ge arsmodell: ”); arsmodell = input.readInt(); } } Jonny Karlsson 15.1.2008
Instansmetoder Instansmetoderna visaEgenskaper och inmataEgenskaper är nu alltså instansmetoder (inte statiska) som är till för att visa och mata ín märke och årsmodell för en VISS BIL. Dessa metoder kan därför inte anropas direkt via klassnamnet som klassmetoder utan Måste anropas via en instans / ett objekt av klassen Bil: Bil b1 = new Bil(); Bil b2 = new Bil(); b1.inmataEgenskaper(); b2.inmataEgenskaper(); b1.visaEgenskaper(); b2.visaEgenskaper(); Mera exempel hittar du på kurshemsidan under ”agenda och material”. Jonny Karlsson 15.1.2008