INF1010 våren Generalisering -spesialisering Gjenbruk av klasser. Ved arv. Klasse-hierarkier. Stein Gjessing.

Like dokumenter
Uke 5, 27. januar Arv og subklasser del I. Stein Gjessing Institutt for informatikk

INF1010 våren 2010 Torsdag 4. februar. Arv og subklasser del I. Emneoversikt subklasser (2 uker) Hva er en subklasse? Eksempel: Universitetsregister

INF1010 våren Arv og subklasser del I

INF1010 våren Arv og subklasser del 1 (pluss litt I/O og unntaksbehandling)

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

INF1010 våren Arv og subklasser del 1 pluss (hvis vi har tid) litt om Unntak, IO og Scanner-klassen

INF1010 våren Arv og subklasser - del 2

INF1010 våren Arv og subklasser - del 2

INF1010 våren 2019 Onsdag 30. januar. Mer om unntak i Java (med litt repetisjon av I/O først)

INF1010 våren 2017 Onsdag 25. januar. Litt om unntak i Java

IN1010 våren 2018 Tirsdag 6. februar. Arv og subklasser - del 2

INF1010 våren 2017 Torsdag 2. februar. Arv og subklasser - del 2

INF1010 våren Arv og subklasser del 1

INF1010 våren Arv og subklasser - del 2

INF1010 våren 2018 tirsdag 23. januar

INF1010 våren Arv og subklasser del 1

INF1010 våren Arv, subklasser og grensesnitt - del 2

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

INF1010 våren Arv og subklasser, del 2

INF1010 våren 2005 Uke 3, 25. januar Arv og subklasser del I

INF1010 våren 2008 Uke 5, 29. januar Arv og subklasser eksempler Litt om unntakshåndtering (40 og 41) Stein Gjessing Institutt for informatikk

INF1010 våren 2008 Uke 5, 29. januar Arv og subklasser eksempler Litt om unntakshåndtering (40 og 41)

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Oversikt. Array indeks utenfor sine grenser. Feil i programmet hva skjer?

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF 1010, vår 2005 Løsningsforslag uke 11

Inf1010 Våren Feilsituasjoner og unntak i Java. Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Oversikt. Feil i programmet hva skjer? Array indeks utenfor sine grenser. Inf1010 Våren Feilsituasjoner og unntak i Java

INF1010 våren Arv og subklasser, del 2

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1000-SIKT - Notat om I/O i Java

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

Post-it spørsmål fra timen (Arv og subklasser)

IN Notat om I/O i Java

INF Løsning på seminaropppgaver til uke 8

INF1010 våren februar. Arv og subklasser, del 2

Enkle generiske klasser i Java

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010, 21. januar Klasser med parametre = Parametriserte klasser = Generiske klasser

Repetisjon. INF gruppe 13

INF Notat om I/O i Java

Kapittel 7: Mer om arv

INF1010 våren februar. Arv og subklasser, del 2. Repetisjon. Repetisjon - Biler. Repetisjon: Klasser - Subklasser

Innhold. Forord Det første programmet Variabler, tilordninger og uttrykk Innlesing og utskrift...49

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Litt om pakker og mest om data inn og ut

Introduksjon til objektorientert programmering

2 Om statiske variable/konstanter og statiske metoder.

Gjennomgang av eksamen H99

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

INF1010 oversikt med

INF1000: Forelesning 6. Klasser og objekter del 1

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Oblig 4Hybelhus litt mer tips enn i oppgaven

UNIVERSITETET I OSLO

Enkel lesing og skriving i Java

Forkurs INF1010. Dag 1. Andreas Færøvig Olsen Tuva Kristine Thoresen

Hittil har programmene kommunisert med omverden via tastatur og skjerm Ønskelig at data kan leve fra en kjøring til neste

INF1010 Arv. Marit Nybakken 2. februar 2004

Kapittel 11: Unntakshåndtering. Java som første programmeringsspråk

Bruk av class Scanner, FileWriter og Formatter som alternativ til EasyIO i INF1000.

UNIVERSITETET I OSLO

Kapittel 13: Unntakshåndtering

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Fra Python til Java, del 2

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

UNIVERSITETET I OSLO

1. Finn klassene (hvilke objekter er det i problemet) 1. Dataene som beskriver problemet (hvilke objekter har vi og hvor mange klasser er det?

INF1010 våren 2017 Torsdag 26. januar. Arv og subklasser del 1. Stein Gjessing Institutt for informatikk Universitetet i Oslo

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

INF1010. Grensesnittet Comparable<T>

INF Uke 10. Ukesoppgaver oktober 2012

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Eksamen. Objektorientert Programmering IGR 1372

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010 våren Grensesnitt

UNIVERSITETET I OSLO

INF våren 2017

TOD063 Datastrukturer og algoritmer

Å lese tall fra en fil, klassen Scanner

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

INF1000 Prøveeksamen Oppgave 7 og 9

Kapittel 6: Arv. Redigert av: Khalid Azim Mughal

UNIVERSITETET I OSLO

Obligatorisk oppgave 4: Lege/Resept

Løsningsforslag til eksamen i INF1000 våren 2006

2 Om statiske variable/konstanter og statiske metoder.

INF1000: noen avsluttende ord

INF1010 oversikt med. 23. mai Subklasser mm. Unntaksbehandling GUI Tråder. Stein Gjessing InsBtuC for informabkk Universitetet i Oslo

Transkript:

INF1010 våren 2009 Uke 5, 27. januar Arv og subklasser del I Stein Gjessing Institutt for informatikk 1 Emneoversikt subklasser Generalisering -spesialisering Gjenbruk av klasser Ved sammensetning (komposisjon) Ved arv Referanser - pekere Klasse-hierarkier Virtuelle metoder Nøkkelordet super Konvertering av referanser Klassen Object Metoden equals() Nøkkelordet instanceof Konstruktører 2 Eksempel: Universitetsregister Eksempel: Universitetsregister Ietmini-system for Universitetet i Oslo skal alle studenter registreres med og telefonnummer (åtte siffer), samt hvilket studie de er tatt opp til. Det skal være mulig for studenter å bytte. Systemet skal også inneholde informasjon om de ansatte ved universitetet, nemlig, telefonnummer, lønnstrinn og antall arbeidstimer e per uke. Teknisk- administrativt ansatte har en arbeidsuke på 37,5 timer, mens vitenskapelig ansatte har 40-timers arbeidsuke. Alle personer skal behandles som......... Ietmini-system for Universitetet i Oslo skal alle studenter registreres med og telefonnummer (åtte siffer), samt hvilket studie de er tatt opp til. Det skal være mulig for studenter å bytte. Systemet skal også inneholde informasjon om de ansatte ved universitetet, nemlig, telefonnummer, lønnstrinn og antall arbeidstimer e per uke. Teknisk- administrativt ansatte har en arbeidsuke på 37,5 timer, mens vitenskapelig ansatte har 40-timers arbeidsuke. Alle personer skal behandles som......... Substantivmetoden ti t 3 4 4

Klassen Student Klassen Ansatt class Student { String ; int ; System.out.println("Navn: " + ); System.out.println("Telefon: " + ); System.out.println("Studie: " + ); boolean { return >= 10000000 && <= 99999999; void byttprogram(string nytt) { = nytt; 5 class Ansatt { String ; int ; int lønnstrinn; int antalltimer; System.out.println("Navn: " + ); System.out.println("Telefon: " + ); System.out.println("Lønnstrinn: " + lønnstrinn); System.out.println("Timer: " + antalltimer); boolean { return >= 10000000 && <= 99999999; void lønnstillegg(int tillegg) { lønnstrinn += tillegg; 6 Student vs Ansatt Klassen Person Felles variable:, Kan samle det som er felles i en egen, mer generell, klasse: Egne variable: Student: Ansatt: lønnstrinn, antalltimer Felles metoder: Lignende metoder: skrivdata() String ; int ; boolean { return >= 10000000 && <= 99999999; Egne metoder: Student: nyttprogram(string nytt) Ansatt: lønnstillegg(int tillegg) 7 8

Student og Ansatt som subklasser Kan nå gjøre Student og Ansatt til subklasser av Person: class Student { String ; int ; boolean {... void byttprogram(string nytt) {... String ; int ; boolean {... void byttprogram(string nytt) {... void byttprogram(string nytt) { = nytt; Angir at klassene Student og Ansatt class Ansatt extends Person { int lønnstrinn; int antalltimer; er subklasser (= utvidelser) av klassen Person. Eksempler på objekter av klassene void lønnstillegg(int tillegg) { lønnstrinn += tillegg; Hva med skrivdata()? Nytt Java nøkkelord: - Kommer tilbake til denne extends 9 10 Bruk av en subklasse UML-notasjon for subklassehierarki Vi kan bruke variable og metoder i en subklasse på samme måte som om vi hadde definert alt i én klasse: Uten bruk av subklasser (før): class Student { String ; int ; boolean {... void byttprogram(string nytt) {... Navn: stud Type: Student eller Med bruk av subklasser (nå): String ; int ; boolean {... void byttprogram(string nytt) {... Navn: stud Type: Student Student stud = new Student(); stud.; String prog = stud.; String ; int ; boolean {... void byttprogram(string nytt) {... class Ansatt extends Person { int lønnstrinn; void lønnstillegg (int tillegg){ lønnstrinn += tillegg; Person Student Ansatt 11 12

Hva er en subklasse? Generalisering spesialisering En subklasse er en klasse som bygger på en allerede spesifisert klasse, og som dermed arver dennes egenskaper i tillegg til å utvide med egne egenskaper (metoder/variable). En subklasse er altså en mer spesialisert utgave av klassen den bygger på. Klassen vi bygger på kalles en superklasse. Mengden av alle Personer lønnstrinn antalltimer Person Ansatt Mengden av alle Ansatte Student Mengden av alle Studenter Sub-klasse ~ Sub-mengde (del-mengde) 13 14 Klasse-hierarkier Generalisering spesialisering Det er mulig å definere subklasser av en subklasse: String ; int ; boolean {... Person Student Mengden av alle Personer Person Student Mengden av alle Studenter void byttprogram(string nytt){... MasterStudent MasterStudent class MasterStudent extends Student { String veileder; Obs: Her er MasterStudent en subklasse av både Student og Person, og arver egenskaper fra begge disse. veileder 15 veileder Mengden av alle MasterStudenter 16

Klassehierarki: Klasser - Subklasser Klassehierarki: Bil Personbil Klasser - Subklasser class Bil { <lys beige egenskaper> class Personbil extends Bil { <røde egenskaper> class Lastebil extends Bil { <grønne egenskaper> class Drosje extends Personbil { <gule egenskaper> Bil Personbil class Bil {... class Personbil extends Bil {... class Lastebil extends Bil {... Alle lastebiler Lastebil Drosje Alle biler Alle drosjer Alle personbiler Lastebil Drosje class Drosje extends Personbil {... 17 18 Lenkete class StandardLenketListe lister forste Objekter av klassene Klassehierarki class SortertLenketListe class LenketListeMedHalepeker class StandardLenketListe forste forste settinnsist( ) class IndeksertSortertLenketListe class DobbeltLenketSortertListe taut( ) forste forste : :? siste? 19 class SortertLenketListe class IndeksertSortertLenketListe class LenketListeMedHalepeker class DobbeltLenketSortertListe?

Klassehierarki: Et eksempel fra Java-biblioteket ArrayList Klassehierarki: Enda et eksempel fra Java- biblioteket Object Throwable AttributeListt RoleList RoleUnresolvedList Exception RuntimeException IOException AWTException... og ca. 60 andre Hvorfor bruker vi subklasser? Klasser og subklasser avspeiler virkeligheten Bra når vi skal modellere virkeligheten i et datasystem Klasser og subklasser avspeiler arkitekturen til datasystemet / datamet Bra når vi skal lage et oversiktlig stort Klasser og subklasser kan brukes til å forenkle og gjøre mer mer forstålig: Gjenbruk av deler Gjenbruk av deler av mer Viktig å ikke måtte skrive ny kode hver gang man skal mere noe nytt Gjenbruk mest mulig av kode du har skrevet før Lag kode med henblikk på et den skal brukes (til noe liknende) senere Lag biblioteker Bruk andres bibliotek Javas eget bibliotek Strukturering av kode ( gjenbruk i samme ) Inf1000: Gjenbruk av metoder 23 24

Gjenbruk ved hjelp av klasser / subklasser Ved sammensetning (komposisjon) (i inf1000): Deklarer referansevariable (pekere) til objekter av en klasse du har skrevet før Lag objekter av denne klassen Kall på metoder i disse klassene Ved arv (nytt i inf1010): 0) Lag en ny klasse som utvider den eksisterende klassen (spesielt viktig ved litt større klasser) Føy til ekstra variable og metoder medlemmer p Gjenbruk ved sammensetning Gjenbruk ved sammensetning har dere allerede sett mange eksempler på i INF1000. Eksempel: class PersonRegister { HashMap medlemmer = new HashMap(); Person p = new Person(); String = Ole-Morten"; medlemmer, p og er /* Diverse metoder */ deklarert som pekere til objekter av andre klasser som allerede eksisterer. Person-objekt 25 Ole-Morten 26 Gjenbruk ved arv Når skal vi bruke arv? class Bok { String tittel, forfatter; class Fagbok extends Bok { double dewey; class Skjønnlitterærbok extends Bok { String sjanger; class Bibliotek { Bok b1 = new Fagbok(); Bok b2 = new Skjønnlitterærbok(); Arv Kompo osisjon Objekter av klassene Gjenbrukes Gjenbrukes Generelt: Ved er-en en relasjon mellom objektene. En Student er en Person En Ansatt er en Person Hva med relasjonene roman bok? En roman er en bok (arv). kapittel bok? Et kapittel er ikke en bok, men et kapittel er en del av en bok, og en bok har/består av kapitler. Relasjoner som har-en og består-av skal ikke modelleres som subklasser, men ved hjelp av sammensetning (som datafelt (attributter/variable)). 27 28

Oppgave Hvor er det naturlig å bruke komposisjon og hvor er det naturlig med arv i disse tilfellene? Relasjon mellom Komposisjon Arv vare - varelager nyhetskanal - kanal person - personregister cd - spor (sanger) PC - datamaskin gaupe - rovdyr fly - transportmiddel motor - bil 29 Ulike referansetyper String ; int ; boolean {... void byttprogram(string nytt){... Student stud; Person pers; pers stud Objekt av klassen Student Vi kan ha pekere både av typen Student og av typen Person 30 Ulike måter å se et objekt på Eksempel Navn: pers Typen (klassen) til et objekt er uforanderlig. Et objekt kan likevel fremtre for oss på ulike måter. Type: Person Navn: stud Et objekt av klassen Type: Student... kan vi se på som et objekt av typen (klassen) Person: da er egenskapene som er spesielle for Student ikke synlige (men de er der fortsatt!). Student: da er både Person- og Student- egenskapene synlige for oss. Typen (klassen) til Det er referansens type som avgjør hvordan objektet hele dette objektet er Student fremtrer. (med untak av virtuelle metoder, som vi snart skal lære hva er) Student stud; Person pers; stud = new Student(); pers = stud; (Det er lov å skrive: pers = new Student(); 31 String ; int ; boolean {... void byttprogram(string nytt) {... Student s String ; int ; Person p String ; int ; Anta: Student s = new Student(); Person p = new Student(); Hvilke av følgende uttrykk er nå lovlige? s. = Ole-Morten"; s.; s. = "Matte"; s.byttprogram("data"); p. = Ole-Morten"; p.; p. = "Matte"; p.byttprogram("data"); 32

Omdefinering av metoder - polymorfi Vi har sett at det med subklasser er mulig å utvide en eksisterende klasse med nye metoder. En subklasse kan også definere en metode med samme signatur som en metode i superklassen, men med ulikt innhold. Den nye metoden vil omdefinere (erstatte) metoden som er definert i superklassen. Metoder som kan omdefineres på denne måten kalles virtuelle metoder. I Java er alle metoder virtuelle, så sant de ikke er deklarert med final. Virtuelle metoder = polymorfi 33 Polymorfi: eksempel For objekter av typen Hund class Hund { er det denne metoden som //... gjelder. void bjeff() { System.out.println("Voff-voff"); For objekter av typen class Rasehund extends Hund { Rasehund er det denne //... metoden som gjelder. void bjeff() { System.out.println("Vov-vov"); Anta: Hund h = new Hund(); Rasehund r = new Rasehund(); Hund g = new Rasehund(); Hva skrives ut ved hvert av kallene: h.bjeff(); r.bjeff(); g.bjeff(); 34 Polymorfi: eksempel Polymorfi: skrivdata Hund h Rasehund r Hund g I universitets-eksempleteksemplet så vi at klassene Student og Ansatt hadde nesten like skrivdata-metoder: Anta: void bjeff() { System.out.println("Voff-voff"); void bjeff() { System.out.println("Voff-voff"); void bjeff() { System.out.println( println("vov-vov"); Hva skrives ut ved hvert av kallene: Hund h = new Hund(); h.bjeff(); voff-voff Rasehund r = new Rasehund(); r.bjeff(); vov-vov Hund g = r; g.bjeff(); vov-vov // I klassen Student: System.out.println("Navn: " + ); System.out.println("Telefon: " + ); System.out.println("Studie: " + ); // I klassen Ansatt: System.out.println("Navn: " + ); System.out.println("Telefon: " + ); System.out.println("Lønnstrinn: " + lønnstrinn); System.out.println( println("timer: " + antalltimer); 35 36

Nøkkelordet super Nøkkelordet super brukes til å aksessere variable / metoder i objektets superklasse. Dette kan vi bruke til å la superklassen Person ha en generell skrivdata, som så kalles i subklassene: // I klassen Person: System.out.println("Navn: " + ); System.out.println("Telefon: " + ); // I klassen Student: super.skrivdata(); System.out.println("Studie: " + ); // Tilsvarende i klassen Ansatt: super.skrivdata(); System.out.println("Lønnstrinn: " + lønnstrinn); System.out.println("Timer: " + antalltimer); 37 class StudentRegister { public static void main(string [] args) { Student stud = new Student(); Person pers = new Person(); Person pers stud.skrivdata(); skrivdata(); // Her brukes definisjonen i Student pers.skrivdata(); // Her brukes definisjonen i Person Person pers2 = stud; pers2.skrivdata(); // Hvilken definisjon benyttes her? Student stud Person pers2 System.out.println("Navn: " + ); System.out.println("Navn: " + ); System.out.println("Telefon: " + ); System.out.println("Telefon: " + ); Regel: Det er objekttypen, ikke peker- typen, som avgjør hvilken definisjon som gjelder når en metode er virtuell. super.skrivdata(); skrivdata(); System.out.println("Studprgm: " + prgm); 38 Eksempel: class Musikk Hva skrives ut når met Musikk.java kjøres? class Musikk { public static void main (String[] args) { Instrument inst = new Piano(); inst.skrivdefinisjon(); class Instrument { void skrivdefinisjon () { System.out.println("Et instrument er noe man kan spille på"); class Piano extends Instrument { void skrivdefinisjon () { System.out.println("Et piano er et strengeinstrument"); 39 Musikk versjon 2 class Musikk { public static void main (String[] args) { Instrument inst = new Piano(); inst.skrivdefinisjon(); Hva skjer i dette tilfellet? class Instrument { void skrivdefinisjon () { System.out.println("Et instrument er noe man kan spille på"); class Piano extends Instrument { void skrivdefinisjon (String overskrift) { System.out.println(overskrift); System.out.println("Et piano er et strengeinstrument"); 40

Musikk versjon 3 class Musikk { public static void main (String[] args) { Instrument inst = new Piano(); inst.skrivdefinisjon(); Hva skjer her da? class Instrument { void skrivdefinisjon(string overskrift) { System.out.println(overskrift); System.out.println("Et instrument er noe man kan spille på"); class Piano extends Instrument { void skrivdefinisjon () { System.out.println("Et piano er et strengeinstrument"); 41 Musikk-eksemplene: Lærdom Når vi ser på et objekt via en superklasse-peker, p mister vi vanligvis tilgang til metoder og variable som er definert i subklassen. Dersom en metode i subklassen også er definert (med samme signatur) i superklassen har vi likevel tilgang via superklasse-pekeren, k fordi objektets t dypeste metode brukes. Slike metoder kalles virtuelle metoder, og denne mekanismen kalles polymorfi. Det som er relevant er derfor hvilke metoder som finnes i superklassen (med hvilke parametre), men ikke nødvendigvis innholdet i metodene. Samme signatur = samme og nøyaktig samme parametre 42 Flere virtuelle metoder pris 100 class Vare { int pris; int prisutenmoms() { return pris; int prismedmoms() { return (int) (1.25*prisUtenMoms()); class SalgsVare extends Vare { int rabatt; // I prosent... int prisutenmoms() { return pris (pris*rabatt/100); Anta: Vare v = new Vare(); v.pris = 100; SalgsVare s = new SalgsVare(); s.pris = 100; s.rabatt = 25; Hva blir nå: v.prismedmoms() s.prismedmoms() 43 Vare v int prisutenmoms ( ) { return pris; Anta: Vare v = new Vare(); int prismedmoms { v.pris = 100; return (int) (1.25*prisUtenMoms ( ) ); SalgsVare s = Vare v2 new SalgsVare(); s.pris = 100; pris 100 s.rabatt = 20; Vare v2 = s; int prisutenmoms ( ) { SalgsVare s return pris; int prismedmoms { Hva blir nå: return (int) (1.25*prisUtenMoms ( ) ); v.prismedmoms(); s.prismedmoms(); v2.prismedmoms(); rabatt 20 int prisutenmoms ( ) { return pris (pris*rabatt/100); 44

Omdefinering av variable En subklasse kan også omdefinere (skyggelegge) variable som er definert i superklassen. MEN: Dette bør IKKE brukes!!! Sjelden nødvendig Reduserer lesbarheten Kan føre til uventet oppførsel Og mer trenger dere ikke å vite om det try { Kort om unntaksbehandling <USIKKER KODE> <Hvis det skjer noe galt:> throw new Unntaksklassen( ); Enkleste form for unntaksbehandling. catch (Unntaksklassen unt) { < Unntaksbehandling. Dette hoppes over når ikke noe unormalt/galt lthar hendt dt> På forhånd har vi deklarert: class Unntaksklassen < her fortsetter vanligvis met extends Exception { både etter normal utføring og etter behandling av eventuelle unntak >... 45 46 try { x = b ( ); Når unntak oppstår i en metode som ikke fanger og behandler unntaket t selv int b( () throws Unntaksklassen kall på b b oppdager en feil: throw new Unntaksklassen ( ) ; catch (Unntaksklassen unt) { Normal retur: < Unntaksbehandling. return 17; Dette hoppes over når intet unormalt har hendt > < her fortsetter met både etter normal throw - Starter t å kaste et unntak utføring og etter behandling av eventuelle unntak > try - Står foran en blokk som kan fange et unntak catch - Står foran en blokk som behandler et unntak. throws - Kaster et unntak videre. Brukes i overskriften behandle et unntak på en metode som ikke selv vil 47 IO feil En metode som kan komme til å gjøre en IO-feil må enten behandle dette selv, eller kaste feilen videre: public void mittprogrammedio( ) throws IOException { < kode som gjør fil-behandling> 48

Inn fra tastatur i Java main les import java.io.*; import java.util.*; class Hilsen { public static void main (String [] args) throws IOException { Scanner les= new Scanner (System.in); System.out.println( Hva heter du?"); String = les.nextline ( ); System.out.println( God dag " + ); Kaster IOunntak til runtime- systemet snidil:>javac Hilsen.java snidil:>java Hilsen Hva heter du? Stein Gjessing God dag Stein Gjessing snidil:> Hilsen klassedatastruktur 11 konstruktører 47 metoder pluss plass til å lagre en streng (en tekst) String nextline() Objekt av klassen Scanner Stein Gjessing Et objekt av klassen String 49 Om å lese tall (Utdrag av et ) import java.io.*; import java.util. *; Scanner tastaturparser= new Scanner (System.in); double tall; int antall; System.out.println( Tast inne et kommatall: ); tall = tastaturparser.nextdouble(); System.out.println( Tast inne et tall: ); antall = tastaturparser.nextint(); System.out.println ( Du skrev + tall + og antall ); main tastaturparser double nextdouble() int nextint() Objekt av klassen Scanner som henter data fra System.in (tastaur) import java.io.*; import java.util.*; class LesFraFil { Innlesing fra fil Java original Objekt av klassen Scanner main filleterinn public static void main (String [ ] args) throws IOException { Scanner filleterinn = new Scanner (new File ("minfil.txt )); int tall; boolean hasnext() int nextint() while(filleterinn.hasnext()) hasnext()) { tall = filleterinn.nextint(); System.out.println(tall); // slutt main DETTE GÅR BRA HVIS // slutt class LesFraFil FILEN BARE INNE- HOLDER HELTALL!! 51 Utskrift til fil - Java original PrintWriter filut = new PrintWriter (new FileWriter ( minutfil.txt )); // Utskrift skjer som til skjerm: filut.println( utskrift + 17 ): For at innholdet på den nye filen skal bevares må vi til slutt si: filut.close( ); main filut Dette objektet skriver på filen minutfil.txt void println() minutfil.txt 52