INF1010 våren Arv og subklasser del 1

Like dokumenter
INF1010 våren Arv og subklasser del 1

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

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 Arv, subklasser og grensesnitt - del 2

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 1 (pluss litt I/O og unntaksbehandling)

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

INF1010 våren Arv og subklasser del I

INF1010 våren Arv og subklasser - del 2

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

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 Grensesnitt

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

INF1010 våren Grensesnitt

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

Repitisjonskurs. Arv, Subklasser og Grensesnitt

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

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

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

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

INF1010 våren Arv og subklasser, del 2

INF1010 våren Grensesnitt (interface)

INF1010 våren Arv og subklasser, del 2

INF1010 våren Interface (Grensesnitt)

INF1010 våren Arv og subklasser - del 2

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

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

Kapittel 7: Mer om arv

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, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010 våren januar. Objektorientering i Java

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

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

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

UNIVERSITETET I OSLO

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

INF1010 Eksamenstips. Løsningsforslag prøveeksamen del 1.

INF Seminaroppgaver til uke 3

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

INF1000: Forelesning 6. Klasser og objekter del 1

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

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

INF1010 Arv. Marit Nybakken 2. februar 2004

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

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Enkle generiske klasser i Java

OBJEKTER SOM EN PROGRAMMERINGS-TEKNIKK

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

En klasse som arver, eller selv deklarerer en abstrakt metode, må deklareres som abstrakt.

IN1010 våren januar. Objektorientering i Java

INF1010. Grensesnittet Comparable<T>

Abstrakte metoder og klasser. Abstrakte metoder og klasser. Uke 9 INF1010, 27. februar 2007, Abstrakte klasser og grensesnitt (interface)

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

UNIVERSITETET I OSLO

INF1010, 23. februar Parametriserte klasser Om å gå gjennom egne beholdere (subklasser og grensesnitt 3)

INF1000: Forelesning 7. Konstruktører Static

INF1000: Forelesning 7

Velkommen til. INF våren 2016

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

Gjennomgang av eksamen H99

Kapittel 9: Sortering og søking Kort versjon

Generiske mekanismer i statisk typede programmeringsspråk

Kapittel 6: Arv. Redigert av: Khalid Azim Mughal

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Dagens tema Kapittel 8: Objekter og klasser

Introduksjon til objektorientert programmering

INF Notater. Veronika Heimsbakk 10. juni 2012

Læringsmål for forelesningen

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

Hva er en metode. Hva skjer når vi kaller en metode

LO191D/LC191D Videregående programmering

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

UNIVERSITETET I OSLO

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

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

UNIVERSITETET I OSLO

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

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

TDT4100 Objektorientert programmering

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Obligatorisk oppgave 4: Lege/Resept

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Sortering med tråder - Quicksort

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Klasser, objekter, pekere og UML. INF gruppe 13

Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF1010 Binære søketrær ++

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

UNIVERSITETET I OSLO

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

OO-eksempel. Modellen ser slik ut: Studenter + antstudenter : int = 0

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

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

Transkript:

INF1010 våren 2016 Torsdag 4. februar Arv og subklasser del 1 Stein Gjessing Institutt for informatikk Universitetet i Oslo 1

Når du har lært om subklasser kan du programmere med: Første uke: Spesialisering (og generalisering) Klasse-hierarkier - arv Referanser (pekere) sterk typing Nøkkelordet instanceof Konvertering av referanser Klassen Object Abstrakte klasser Andre uke (onsdag 10. februar NB!) Virtuelle metoder - polymorfi Nøkkelordet super Gjenbruk av klasser og begreper Ved sammensetning (komposisjon) Ved arv Konstruktører 2

Hva er en subklasse? En klasse, Kl, beskriver objekter med visse felles egenskaper En subklasse av Kl, Sub, beskriver objekter som har de samme egenskapene (som beskrevet av Kl), men i tillegg er Sub-objektene noe mer, de har flere og / eller mer spesielle egenskaper... class Kl {... class Sub extends Kl {... Nytt Java nøkkelord: extends Navn på klasser og subklasser (Kl og Sub her) bør best mulig beskrive hva klassene representerer 3

Eksempel: Universitetsregister I et mini-system for Universitetet i Oslo skal alle studenter registreres med og telefonnummer (åtte siffer), samt hvilket studieprogram de er tatt opp til. Det skal være mulig for studenter å bytte program. Systemet skal også inneholde informasjon om de ansatte ved universitetet, nemlig, telefonnummer, lønnstrinn og antall arbeidstimer per uke. Tekniskadministrativt ansatte har en arbeidsuke på 37,5 timer, mens vitenskapelig ansatte har 40-timers arbeidsuke. Alle personer skal behandles som......... 4

Eksempel: Universitetsregister I et mini-system for Universitetet i Oslo skal alle studenter registreres med og telefonnummer (åtte siffer), samt hvilket studieprogram de er tatt opp til. Det skal være mulig for studenter å bytte program. Systemet skal også inneholde informasjon om de ansatte ved universitetet, nemlig, telefonnummer, lønnstrinn og antall arbeidstimer per uke. Tekniskadministrativt ansatte har en arbeidsuke på 37,5 timer, mens vitenskapelig ansatte har 40-timers arbeidsuke. Alle personer skal behandles som......... Substantivmetoden 5

Klassen Student tlfnr program skrivdata() gyldigtlfnr() byttprogram() class Student { String ; int tlfnr; String program; void skrivdata() { System.out.println("Navn: " + ); System.out.println("Telefon: " + tlfnr); System.out.println("Studieprogram: " + program); boolean gyldigtlfnr() { return tlfnr >= 10000000 && tlfnr <= 99999999; void byttprogram(string nytt) { program = nytt; 6

Klassen Ansatt tlfnr lønnstrinn antalltimer skrivdata() gyldigtlfnr() lønnstillegg() class Ansatt { String ; int tlfnr; int lønnstrinn; int antalltimer; void skrivdata() { System.out.println("Navn: " + ); System.out.println("Telefon: " + tlfnr); System.out.println("Lønnstrinn: " + lønnstrinn); System.out.println("Timer: " + antalltimer); boolean gyldigtlfnr() { return tlfnr >= 10000000 && tlfnr <= 99999999; void lønnstillegg(int tillegg) { lønnstrinn += tillegg; 7

Hm på forrige lysark var det ingen egenskaper som var private eller public? OK Vi kommer tilbake til det på lysark 25 8

Student vs Ansatt Felles variable:, tlfnr Egne variable: Student: program Ansatt: lønnstrinn, antalltimer Felles metoder: gyldigtlfnr() Lignende metoder: skrivdata() Egne metoder: Student: byttprogram(string nytt) Ansatt: lønnstillegg(int tillegg) tlfnr program skrivdata() gyldigtlfnr() byttprogram() Student-objekt tlfnr lønnstrinn antalltimer skrivdata() gyldigtlfnr() lønnstillegg() Ansatt-objekt 9

Klassen Person Kan samle det som er felles i en egen, mer generell, klasse: class Person { String ; int tlfnr; boolean gyldigtlfnr() { return tlfnr >= 10000000 && tlfnr <= 99999999; Klassen Person beskriver alt som er felles for studenter og ansatte tlfnr gyldigtlfnr() 10

Student og Ansatt som subklasser Kan nå gjøre Student og Ansatt til subklasser av Person: class Student extends Person { String program; void byttprogram(string nytt) { program = nytt; class Ansatt extends Person { int lønnstrinn; int antalltimer; Angir at klassene Student og Ansatt er subklasser (= utvidelser) av klassen Person. void lønnstillegg(int tillegg) { lønnstrinn += tillegg; Hva med skrivdata()? - Kommer tilbake til denne Nytt Java nøkkelord: extends 11

class Student { String ; int tlfnr; String program; class Person { String ; int tlfnr; boolean gyldigtlfnr() {... boolean gyldigtlfnr() {... void byttprogram(string nytt) {... class Student extends Person { String program; void byttprogram(string nytt) {... Eksempler på objekter av klassene tlfnr gyldigtlfnr() tlfnr program gyldigtlfnr() byttprogram() tlfnr gyldigtlfnr() program byttprogram() 12

Bruk av en subklasse 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): eller Med bruk av subklasser (nå): class Student { String ; int tlfnr; String program; boolean gyldigtlfnr() {... void byttprogram(string nytt) {... Navn: stud class Person { String ; int tlfnr; boolean gyldigtlfnr() {... class Student extends Person { String program; void byttprogram(string nytt) {... Navn: stud tlfnr program gyldigtlfnr() byttprogram() Type: Student Type: Student Student stud = new Student(); boolean ok = stud.gyldigtlfnr(); String prog = stud.program; tlfnr gyldigtlfnr() program byttprogram() 13

UML-notasjon for subklassehierarki class Person { String ; int tlfnr; boolean gyldigtlfnr() {... Person class Student extends Person { String program; void byttprogram(string nytt) {... class Ansatt extends Person { int lønnstrinn; void lønnstillegg (int tillegg){ lønnstrinn += tillegg; Student Ansatt I INF1010 er riktig UML-notasjon ikke viktig (men subklassehierarkier er viktig) 14

Igjen: Hva er en subklasse? 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/konstanter). En subklasse er altså en mer spesialisert utgave av klassen den bygger på. Klassen vi bygger på kalles en superklasse. Dette fant Ole-Johan Dahl og Kristen Nygaard på i ca. 1963, og laget programmeringsspråket Simula 15

Spesialisering - Generalisering Mengden av alle Personer tlfnr gyldigtlfnr() Person Student Mengden av alle Studenter tlfnr gyldigtlfnr() lønnstrinn antalltimer lønnstillegg() Ansatt Mengden av alle Ansatte tlfnr gyldigtlfnr() program byttprogram() Sub-klasse ~ Sub-mengde (del-mengde) 16

Klasse-hierarkier Det er mulig å definere subklasser av en subklasse (etc.): class Person { String ; int tlfnr; boolean gyldigtlfnr() {... Person Student class Student extends Person { String program; void byttprogram(string nytt){... 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. tlfnr gyldigtlfnr() program byttprogram() veileder MasterStudent-objekt 17

Generalisering spesialisering Mengden av alle Personer tlfnr gyldigtlfnr() Person Student Mengden av alle Studenter tlfnr gyldigtlfnr() program byttprogram() MasterStudent Mengden av alle MasterStudenter tlfnr gyldigtlfnr() program byttprogram() veileder 18

Klassehierarki: Klasser - Subklasser Bil class Bil {... Lastebil Personbil Drosje class Personbil extends Bil {... class Lastebil extends Bil {... class Drosje extends Personbil {... 19

Klassehierarki: Personbil Bil 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> Alle lastebiler Lastebil Drosje Alle biler Alle drosjer Alle personbiler 20

Hvorfor bruker vi subklasser? 1. Klasser og subklasser avspeiler virkeligheten Bra når vi skal modellere virkeligheten i et datasystem 2. Klasser og subklasser avspeiler arkitekturen til datasystemet / dataprogrammet Bra når vi skal lage et oversiktlig stort program 3. Klasser og subklasser kan brukes til å forenkle og gjøre programmer mer forstålig, og spare arbeid: Gjenbruk av programdeler Bottom up programmering Lage verktøy Top down programmering Mer om dette neste uke Postulere verktøy 1 og 2 er klart viktigst 21

Ulike referansetyper (pekertyper) class Person { String ; int tlfnr; boolean gyldigtlfnr() {... Person pers; Student stud; pers stud gyldigtlfnr() tlfnr Rollen Person class Student extends Person { String program; void byttprogram(string nytt){... program byttprogram() Objekt av klassen Student Og vi har igjen forskjellige roller = forskjellige briller Rollen Student 22

Ulike måter å se et objekt på Navn: stud Type: Student tlfnr gyldigtlfnr() program byttprogram() Navn: pers Typen (klassen) til hele dette objektet er Student Type: Person Typen (klassen) til et objekt er uforanderlig. Et objekt kan likevel fremtre for oss på ulike måter Det kan spille forskjellige roller. Et objekt av klassen class Student extends Person {... 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 Studentegenskapene synlige for oss. Det er referansens (pekerens) type som avgjør hvordan objektet fremtrer. (med untak av virtuelle metoder, som vi skal lære om neste uke) Student stud; Person pers; stud = new Student(); pers = stud; (Det er lov å skrive: pers = new Student(); 23

Eksempler class Person { String ; int tlfnr; boolean gyldigtlfnr() {... class Student extends Person { String program; void byttprogram(string nytt) {... Student s tlfnr gyldigtlfnr() program byttprogram() Person p tlfnr gyldigtlfnr() program byttprogram() Anta: Student s = new Student(); Person p = new Student(); Hvilke av følgende uttrykk er nå lovlige? s. = Ole-Morten";... s.gyldigtlfnr(); s.program = "Matte"; s.byttprogram("data"); p. = Ole-Ivar";... p.gyldigtlfnr(); p.program = "Matte"; p.byttprogram("data"); 24

Private og public i subklasser Private i en klasse gjør at ingen subklasser kan se denne egenskapen Protected i en klasse gjør at alle subklasser kan se denne egenskapen Men ingen utenfor klassen (bortsett fra i samme katalog/pakke) Public er som før class Person { protected String ; protected int tlfnr; public boolean gyldigtlfnr() { return tlfnr >= 10000000 && tlfnr <= 99999999; Nytt reservert ord i Java: protected 25

Student og Ansatt med protected class Student extends Person { protected String program; public void byttprogram(string nytt) { program = nytt; class Ansatt extends Person { protected int lønnstrinn; protected int antalltimer; public void lønnstillegg(int tillegg) { lønnstrinn += tillegg; Om det hadde stått private antalltimer, så ville ingen subklasser til Ansatt kunne se denne egenskapen 26

Tilordning av pekere class LagFrukt { public static void main(string[] args) { Frukt f; Eple e; Appelsin a; e = new Eple(); f = e; a = f; //??? class Frukt {.. class Eple extends Frukt {.. class Appelsin extends Frukt {.. Eple Frukt Appelsin 27

Hva slags objekt er dette? Den boolske operatoren instanceof hjelper oss å finne ut av hvilken klasse et gitt objekt er, noe som er nyttig i mange tilfeller: class TestFrukt { public static void main(string[] args) { Eple e = new Eple(); skrivut(e); static void skrivut(frukt f) { if (f instanceof Eple) System.out.println("Dette er et eple!"); else if (f instanceof Appelsin) System.out.println("Dette er en appelsin!"); Frukt class Frukt {.. class Eple extends Frukt {.. class Appelsin extends Frukt {.. Eple Appelsin 28

Konvertering av referanser (pekere) Anta at vi har: class Student extends Person { Student stud = new Student(); Ved tilordningen Person pers; pers = stud; har vi en implisitt konvertering fra Student- til Personreferanse. Hvis vi nå ønsker å få tak i de spesielle Studentegenskapene, må vi foreta en eksplisitt konvertering tilbake til Student igjen: Student stud2 = (Student) pers; Dette kalles casting (class-cast) på engelsk, typekonvertering på norsk. Medfører kjøretidstest. 29

Konvertering av referanser (forts.) Hva hvis vi istedenfor hadde hatt: Person pers = new Person(); Student stud = (Student) pers; Dette godkjennes av kompilatoren, men ved kjøring går det galt, og vi får feilmeldingen java.lang.classcastexception (fordi pers ikke peker på et objekt med alle Student egenskapene) For å unngå denne feilen, bør instanceof brukes: if (pers instanceof Student) { Student stud = (Student) pers; (Har objektet som pers peker på alle Student -egenskapene?) 30

Konvertering mellom flere nivåer MasterStudent master = new MasterStudent(); Person Konvertering oppover: Student stud = master; Person pers Person pers = master; Student MasterStudent Konvertering nedover: stud = (Student) pers Student stud master = (MasterStudent) pers (fordi dette krever kontroll under kjøring) MasterStudent master Regel: Alle pekere har lov til å peke bortover og nedover (men ikke oppover ) 31

Klassen Object class Object {... er alle klassers mor (alle klassers superklasse) D.v.s. at alle klasser i Java er subklasser av klassen Object. Når vi skriver class Person { så tolker Java dette som class Person extends Object { Dermed kan en peker av klassen Object peke på et hvilket som helst objekt: Person pers = new Person(); Object obj = pers; Person pers2 = (Person)obj; Person pers2 Object obj Person pers Mer neste gang om hva som er inne i Object-delen av et objekt. 32

Klassehierarki: class Object - eksempel Object Object obj Bil Bil bl Personbil Personbil p Lastebil Drosje Drosje d 33

settinn(object x) Object taut( ) En lenket liste med noder Dette venter vi to uker med forste Element Navn: neste Type: Element Navn: neste Type: Element... Navn: denne Type: Object Navn: denne Type: Object Object-del Subklasse del(er) Hva som helst, siden alle klasser er subklasse av class Object Objekter av class Object (++) 34

Repetisjon: interface / grensesnitt interface Heltallsbeholder { public void settinn(int tall); public int taut( ); public void settinn(int tall) public int taut( ) En tankemodel for gresesnittet Heltallsbeholder Metoden settinn gjør at objektet tar vare på tallet som er parameter til metoden. Metoden taut sletter fra objektet et av de tallene som tidligere er satt inn. Metoden returnerer det tallet som er slettet. Et grensesnitt beskriver en rolle som alle objektene som implementerer dette grensesnittet må kunne spille public void settinn(int tall) public int taut( )... Et objekt av en klasse som implementerer grensesnittet Heltallsbeholder kan også inneholde andre offentlige metoder. 35

Interface: Klassehierarki og Java-kode Heltallsbeholder interface Heltallsbeholder { public void settinn(int tall); public int taut( ); EnkelHeltallsbeholder class EnkelHeltallsbeholder implements Heltallsbeholder { protected int [ ] tallene = new int [100]; protected int antall; public void settinn(int tall) {... public int taut( ) {... Når en klasse implementerer et gresesnitt (interface) tegner vi det nesten på samme måte som en superklasse / subklasse. For å markere at superklassen ikke er det, men et grensesnitt, kan vi enten skrive interface i boksen, og/eller vi kan gjøre et på grensesnittet (og boksen?) kursiv. Norsk: Grensesnitt Engelsk: Interface 36

Arv fra grensesnitt til grensesnitt Nytt interface KanBjeffe{ void bjeff(); KanBjeffe interface Svigermor extends KanBjeffe { boolean okpaabesok(); class NorskSvigermor implements Svigermor { protected boolean hyggelig = false; public void bjeff( ) { System.out.println( Uff uff ); public boolean okpaabesok() { return hyggelig; Svigermor NorskSvigermor 37

38 To (eller flere) grensesnitt = to (eller flere) roller KanBjeffe Utkledd Karnevalshund Denne figuren avspeiler interface -ene og class -en på neste siden Multippel arv

interface KanBjeffe{ void bjeff(); interface Utkledd { int antallfarger(); Foto: AP class Karnevalshund implements KanBjeffe, Utkledd { protected boolean farger; public Karnevalshund (int frg) { farger = frg; public void bjeff( ) { System.out.printl( Voff - voff ); public boolean antallfarger() { return farger; Multippel arv 39

Eller kanskje bedre: KanBjeffe En klasse kan bare ha én superklasse, men gjerne flere "super-grensesnitt" VanligHund Utkledd Karnevalshund Nytt (kanskje bedre hierarki) Denne figuren avspeiler interface -ene og class -ene på neste siden 40

interface KanBjeffe{ void bjeff(); interface Utkledd { int antallfarger(); class VanligHund implements KanBjeffe { public void bjeff() { System.out.println("Vov-vov"); Foto: AP class Karnevalshund extends VanligHund implements Utkledd { private boolean farger; public Karnevallshund (int frg) { farger = frg; public boolean antallfarger() { return farger; 41

Abstrakte metoder og klasser abstract class Ansatt { protected String ; protected double timelonn; public abstract double beregnbonus(); Ikke lov å si new Ansatt()! Ansatt timelonn beregnbonus(); class Deltidsansatt extends Ansatt { public double beregnbonus() { return 0; Deltidsansatt Heltidsansatt timelonn Heltidsansatt objekt beregnbonus(); class Heltidsansatt extends Ansatt { protected int ansiennitetsfaktor; public double beregnbonus() { return timelonn* ansiennitetsfaktor; ansiennitetsfaktor beregnbonus() 42