Malmö högskola 2007/2008 Teknik och samhälle. public String tostring() { return "Media: ID = " + this.id + ", Titel = " + this.

Relevanta dokument
Laboration 16. Uppgift 1

Laboration 3. Uppgift 1

Malmö högskola 2008/2009 CTS

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

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

TENTAMEN OOP

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

Laboration 1 - Grunderna för OOP i Java

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Laboration A Objektsamlingar

TENTAMEN OOP

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Laboration 13, Arrayer och objekt

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

TUTORIAL: KLASSER & OBJEKT

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Klasshierarkier. Klasser kan byggas på redan definierade klasser

Objektorienterad programmering i Java

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Föreläsning 9: Arv och UML

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

Konstruktion av klasser med klasser

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Klasshierarkier - repetition

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

OOP Objekt-orienterad programmering

Tentamen. Grundläggande programmering i Java A 5p, DTAA

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

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

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Arv (Inheritance) Multipelt arv finns i verkligheten. Överskuggning, metodbindning. Läsanvisning: ! Arv! Object, instanceof! Relationer!

Del A (obligatorisk för alla)

Laboration 3, uppgift En klass för en räknare

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

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Tentamen. Lösningsförslag

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

Objektorienterad programmering i Java I

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

OOP Objekt-orienterad programmering

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

Föreläsning 13 Innehåll

TENTAMEN OOP

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

TDDD78 Viktiga begrepp, del 2

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

OOP Objekt-orienterad programmering

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Malmö högskola 2012/2013 Teknik och samhälle

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Tentamen, EDA501 Programmering M L TM W K V

Polymorfi. Objektorienterad och komponentbaserad programmering

Del A (obligatorisk för alla)

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

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

Objektorienterad programmering D2

Tentamen OOP

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Malmö högskola 2008/2009 CTS

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

JAVA Mer om klasser och objektorientering

Modeller, Objekt och Klasser

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

LÖSNINGSFÖRSLAG TENTAMEN

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

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

Arv. Objektorienterad och komponentbaserad programmering

Lösningsförslag till exempeltenta 2

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

Java, klasser, objekt (Skansholm: Kapitel 2)

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

Presentation av trafiksimuleringsprojektet

JAVAUTVECKLING LEKTION 11

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

ID1004 Laboration 4, November 2012

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

DAT043 Objektorienterad Programmering

Abstrakt klass. DD2385 Programutvecklingsteknik Några bilder till föreläsning 4 31/ Exempel: Implementation av Schackpjäser.

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Två designmönster, MVC och Observer/Observable. Objektorienterad programvaruutveckling GU (DIT011)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Tentamen i Programmeringsteknik I, ES,

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

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

Transkript:

Laboration 16 Grundläggande uppgifter Uppgift 1 Klassen Media är given: package laboration16; public class Media { private long id; private String titel; public long getid() { return id; public void setid( long id ) { this.id = id; Media id : long titel : String +getid() : long +setid( long ) +gettitel() : String +settitel( String ) +tostring() : String public String gettitel() { return titel; public void settitel(string titel) { this.titel = titel; public String tostring() { return "Media: ID = " + this.id + ", Titel = " + this.titel; Testkör klassen med nedanstående instruktioner: Media media = new Media(); media.setid( 837884976 ); media.settitel( "En fantastisk värld" ); String res = media.gettitel() + " är ett '" + media.getclass().getname() + "'-objekt" + "\n" + "tostring-metoden: " + media.tostring(); javax.swing.joptionpane.showmessagedialog( null, res ); Av testprogrammet och körresultatet kan du se att det finns en metod, getclass(), vilken anropas av Media-objektet. getclass-metoden ärvs från klassen Object och som returnerar objektets klass-tillhörighet (som ett Class-objekt). Med metoden getname() erhåller man en sträng med klassens namn. Class cls = media.getclass(); String classname = cls.getname(); // classname = laboration16.media DA129A Programmering 1 1

Uppgift 1b Skriv klassen Bok vilken ska ärva klassen Media: Media package laboration16; public class Bok extends Media { Bok Testkör klassen Bok med samma instruktioner som i Uppgift 1a men ändra i första raden Bok media = new Bok(); media.setid( 837884976 ); media.settitel( "En fantastisk värld" ); String res = media.gettitel() + " är ett '" + media.getclass().getname() + "'-objekt" + "\n" + "tostring-metoden: " + media.tostring(); javax.swing.joptionpane.showmessagedialog( null, res ); Programmet ger samma körresultat som i Uppgift 1a. Det är endast objektets typ (klassens namn) som ändrats, från laboration16.media till laboration16.bok. Klassen Bok har ärvt metoderna setid, getid, settitel, gettitel och tostring. Metoderna anropas i testprogrammet. 2

Uppgift 1c Nu ska vi specialisera klassen Bok så att den skiljer sig från Media. Lägg till instansvariabeln författare i klassen Bok: private String författare; Lägg till metoderna getförfattare() : String och setförfattare( String ) i klassen Bok. Lägg till metoden tostring() : String i klassen Bok. Metoden ska returnerar en sträng på formen: "TITEL skriven av FÖRFATTARE" Testkör klassen Bok med nedanstående instruktioner: Bok media = new Bok(); media.setid( 837884976 ); media.settitel( "En fantastisk värld" ); media.setförfattare( "Alice Green" ); String res = media.gettitel() + " av " + media.getförfattare() + "\n" + "tostring-metoden: " + media.tostring(); javax.swing.joptionpane.showmessagedialog( null, res ); Media id : long titel : String +getid() : long +setid( long ) +gettitel() : String +settitel( String ) +tostring() : String Bok författare : String +getförfattare() : String +setförfattare( String ) +tostring() : String I programmet används: Ärvda metoder från klassen Media (setid, settitel, gettitel) Metoder implementerade i klassen Bok (setförfattare, getförfattare, tostring). Som du säkert märkte så användes "korrekt" version av tostring-metoden, nämligen den i klassen Bok. Om du avmarkerar metoden tostring i klassen Bok, kompilerar klassen Bok och testkör övanstående kod på nytt så ser du att tostring-metoden i klassen Media används. 3

Uppgift 1d När man ärver en klass så är klassen som regel färdigskriven och testad. Men av pedagogiska skäl ska du nu ändra i klassen Media för att se följderna av ändringen. Lägg till en konstruktor i klassen Media: public Media( long id, String titel ) { // Lägg till kod Kompilera klassen Media och testkör klassen med nedanstående kod: Media media = new Media(837884976, "En fantastisk värld" ); String res = media.gettitel() + " är ett '" + media.getclass().getname() + "'-objekt" + "\n" + "tostring-metoden: " + media.tostring(); javax.swing.joptionpane.showmessagedialog( null, res ); Körresultatet är samma som i Uppgift 1a. Enda skillnaden är ju att instansvariablerna får sina värde redan vid konstruktionen av Media-objektet. Gå till klassen Bok i NetBeans. Nu är det plötsligt en röd markering i kanten när konstruktorn lades till i klassen Media så blev det ett fel i klassen Bok. Vad beror detta på? Innan du la till en konstruktor i klassen Media så lade kompilatorn till en default-konstruktor i klassen: public Media() { På samma sätt lägger kompilatorn till en default-konstruktor i klassen Bok. Och kompilatorn placerar dessutom en instruktion i konstruktorn, ett anrop till en konstruktor i superklassen. En konstruktor i superklassen anropas ju alltid när ett objekt konstrueras. public Bok() { super(); // anrop av Media(); Innan du la till en konstruktor i Media-klassen så fanns det en konstruktor utan parametrar i Media-klassen (default-konstruktorn). Det finns det inte längre och klassen Bok är inte längre kompilerbar. För att åtgärda detta måste du lägga till en lämplig konstruktor i klassen Bok, t.ex.: public Bok( long id, String titel, String författare ) { super( id, titel ); // Anrop av Media( long, String ); this.författare = författare; Lägg till ovanstående konstruktor i klassen Bok, kompilera klassen Bok och testkör följande testprogram: Bok media = new Bok( 837884976, "En fantastisk värld", "Alice Green" ); String res = media.gettitel() + " av " + media.getförfattare() + "\n" + "tostring-metoden: " + media.tostring(); javax.swing.joptionpane.showmessagedialog( null, res ); Körresultatet ska vara samma som i uppgift 1c. 4

Uppgift 1e Skriv klassen CD vilken ska ärva klassen Media. Klassen CD ska ha två instansvariabler: artist av typen String. melodier av typen String[]. Klassen CD ska ha en konstruktor: public CD( long id, String titel, String artist, String[] melodier ) { super( id, titel ); this.artist = artist; this.melodier = melodier; Klassen ska ha följande metoder: public void setartist( String artist ) public String getartist() public void setmelodier( String[] melodier ) public String[] getmelodier() Bok Media public String tostring() vilken ska skriva ut information om en CD på följande sätt: Artist: Ulrika Olsson Album: Sommar Melodier: 1. a 2. b 3. c 4. d 5. e osv. det är lämpligt att börja med att bygga listan med melodier och därefter hela strängen som ska returneras, ungefär: String lista = "", res; for-loop för samtliga melodier lista += melodi + ny rad-tecken res = + lista; return res; CD artist : String melodier : String[] +getartist() : string +setartist( String ) +getmelodier() : String[] +setmelodier( String[] ) +tostring() : String Testkör klassen CD med följande testprogram: String[] mel = { "Mel 1", "Melodi 2", "Melodi 3", "Mel 4" ; CD cd = new CD( 39488852, "TITEL","ARTIST", mel ); System.out.println( "----- Test av get-metoder -----" ); System.out.println( cd.getid() + ", " + cd.getartist() + ", " + cd.gettitel() ); System.out.println( "----- Test av tostring -----" ); System.out.println( cd.tostring() ); System.out.println( "----- Test av set-metoder -----" ); cd.setartist( "Ulf Lundell" ); cd.settitel( "Vargmåne" ); cd.setmelodier( new String[]{ "M1", "M2", "M3", "M4", "M5", "M6" ); System.out.println( cd.tostring() ); 5

Körresultat av testprogrammet på föregående sida: ----- Test av get-metoder ----- 39488852, ARTIST, TITEL ----- Test av tostring ----- Artist: ARTIST Album: TITEL 1. Mel 1 2. Melodi 2 3. Melodi 3 4. Mel 4 ----- Test av set-metoder ----- Artist: Ulf Lundell Album: Vargmåne 1. M1 2. M2 3. M3 4. M4 5. M5 6. M6 6

Fördjupande uppgifter Du ska skapa en klasshierarki som ser ut som figuren till höger: Fordon Uppgift 2a Skriv klassen Fordon enligt beskrivningen nedan. Ägaren är av typen String. Klassen Fordon instansvariabel: ägare metoder: konstruktorer setägare getägare tostring Skapa sedan en testklass med följande main-metod: public static void main(string[] args){ Fordon f1= new Fordon(); Fordon f2= new Fordon("Lina Nilsson"); System.out.println(f1); System.out.println(f2); f1.setägare("ola Torstensson"); System.out.println(f1.getÄgare()); Körning ger följande utskrift: Ägare: Okänd ägare Ägare: Lina Nilsson Ola Torstensson Bil MotorFordon Motorcykel 7

Uppgift 2b Skriv klassen MotorFordon enligt beskrivningen nedan. Hästkrafter är av typen int. Klassen MotorFordon: är subklass till kassen Fordon (ärver från Fordon) instansvariabler: hk (hästkraft) metoder: konstruktorer gethk sethk tostring I tostring-metoden ska ett anrop till tostring-metoden i superklassen Fordon göras: super.tostring() Skapa en testklass med följande main-metod: public static void main(string[] args){ MotorFordon m1= new MotorFordon(); MotorFordon m2= new MotorFordon("Lina Nilsson",100); System.out.println(m1); System.out.println(m2); m1.setägare("ola Torstensson"); m1.sethk(200); System.out.println(m1); Körning ger följande utskrift: Ägare: Okänd ägare Motorns hästkrafter: 0 Ägare: Lina Nilsson Motorns hästkrafter: 100 Ägare: Ola Torstensson Motorns hästkrafter: 200 Uppgift 2c Skriv klasserna Bil och Motorcykel enligt nedanstående beskrivningar: Klassen Bil är subklass till klassen MotorFordon (ärver från MotorFordon) instansvariabler: regnr (registreringsnummer) metoder: konstruktorer getregnr setregnr tostring 8

Klassen Motorcykel är subklass till klassen MotorFordon (ärver från MotorFordon) instansvariabler: regnr (registreringsnummer) metoder: konstruktorer getregnr setregnr tostring I tostring-metoden ska ett anrop till tostring-metoden i superklassen MotorFordon göras: super.tostring() Gör en testklass som har följande main-metod: public static void main(string[] args) { Fordon[] fordonslista= new Fordon[3]; fordonslista[0]=new Bil("Doris Bengtsson",80,"FGT 450"); fordonslista[1]=new Motorcykel("Klas Bengtsson",70,"KKI 333"); Bil b=new Bil(); b.setägare("fredrik Hansson"); b.sethk(100); b.setregnr("hhh 778"); fordonslista[2]=b; for (int i=0;i<fordonslista.length;i++){ System.out.println(fordonslista[i].getClass()); System.out.println(fordonslista[i]); System.out.println(); Körning ger följande utskrift: class Bil Ägare: Doris Bengtsson Motorns hästkrafter: 80 Registeringsnummer: FGT 450 class Motorcykel Ägare: Klas Bengtsson Motorns hästkrafter: 70 Registeringsnummer: KKI 333 class Bil Ägare: Fredrik Hansson Motorns hästkrafter: 100 Registeringsnummer: HHH 778 Uppgift 2d Skapa ny klass Cykel med en ägare och ett antal växlar. Vad är det lämpligt att Cykel ärver ifrån? Gör lämpliga metoder åt den nya klassen. Testa denna klass genom att göra en testklass med en main-metod. 9

Extrauppgifter Uppgift 3 Lägg till metoden public int compareto(object o) i klassen MotorFordon. Anropet b1.compareto(b2) ska retunera 1 om b1 har en motor med fler hästkrafter än b2. -1 om b2 har en motor med fler hästkrafter än b1 och 0 om deras motoerer har lika många hästkrafter. Använd denna metod för att skapa en metod i en testklass som utifrån en lista av MotorFordon och ett intervall returnerar en ny lista med de MotorFordon som har motorer med antalet hästkrafter inom intervallet. Metodhuvudet ska se ut så här: public MotorFordon[] inomintervallet(motorfordon[] inlista,int min,int max) Om det inte finns några MotorFordon inom intervallet retuneras en lista med längden 0. Testa din metod. Uppgift 4 Lägg till metoden public boolean equals(object o) hos alla klasserna i klassheirakin. Använd denna metod för att söka i en lista över olika fordon och se om ett fordon finns i listan. Du ska skapa en testklass som har en lista av fordon bestående av alla typer av fordon d.v.s. minst fem stycken. Du ska sedan låta användaren mata in en beskrivning på ett fordon och skapa ett objekt utifrån beskrivningen. Sedan ska du undersöka om fordonet finns i listan med hjälp av metoden equals. Ett krav för att två objekt ska vara lika det är att de är av samma typ. Ett sätt att kontrollera om två objekt tillhör samma klass är att använda getclass-metoden på båda objekten och sedan jämföra class-objekten med varandra (med equals-metoden). Ex. Class cls1 = this.getclass(); Class cls2 = o.getclass(); if( cls1.equals(cls2) ) {... eller if( this.getclass().equals(o.getclass()) ) {... returnerar true om this och o refererar till samma typ av objekt. Det kan vara lämpligt att kolla detta innan man försöker omvandla objektet till en mer specialiserad typ. 10

Förslag till lösningar Uppgift 1c public class Bok extends Media { private String författare; public void setförfattare( String författare ) { this.författare = författare; public String getförfattare() { return this.författare; public String tostring() { return gettitel() + " skriven av " + this.författare; Uppgift 1d public class Media { private long id; private String titel; public Media( long id, String titel ) { this.id = id; this.titel = titel; : public class Bok extends Media { private String författare; public Bok( long id, String titel, String författare ) { super( id, titel ); this.författare = författare; : 11

Uppgift 1e public class CD extends Media { private String artist; private String[] melodier; public CD( long id, String titel, String artist, String[] melodier ) { super( id, titel ); this.setartist(artist); this.setmelodier(melodier); public String getartist() { return artist; public void setartist(string artist) { this.artist = artist; public String[] getmelodier() { return melodier; public void setmelodier(string[] melodier) { this.melodier = melodier; public String tostring() { String res = ""; for( int i = 0; i < melodier.length; i++ ) { res += ( i + 1 ) + ". " + melodier[ i ] + "\n"; return "Artist: " + this.artist + "\nalbum: " + gettitel() + "\n" + res; 12

Uppgift 2 4 public class Fordon { private String ägare; public Fordon() { this("okänd ägare"); public Fordon(String ägare) { this.ägare = ägare; public void setägare(string ägare) { this.ägare = ägare; public String getägare() { return ägare; public String tostring() { return "Ägare: " + ägare; // Uppgift 4 public boolean equals(object o) { boolean lika = getclass().equals(o.getclass()); if(lika) { Fordon f = (Fordon) o; lika = ägare.equals(f.getägare()); return lika; ------------------------------------------------------ public class MotorFordon extends Fordon { private int hk; public MotorFordon() { public MotorFordon(String ägare, int hk) { super(ägare); this.hk = hk; public void sethk(int hk) { this.hk = hk; public int gethk() { return hk; public String tostring() { return super.tostring() + " Motorns hästkrafter: " + hk; // Uppgift 4 public boolean equals(object o) { boolean lika = getclass().equals(o.getclass()); if(lika) { 13

MotorFordon m = (MotorFordon) o; lika = (hk == m.gethk()) && (super.equals(o)); return lika; // Uppgift 3 public int compareto(object o) { MotorFordon m = (MotorFordon) o; if(hk<m.gethk()) return -1; else if(hk>m.gethk()) return 1; else return 0; // Uppgift 3 public static MotorFordon[] inomintervallet(motorfordon[] inlista, int min, int max) { int antal = 0; MotorFordon[] res; for(int i=0; i<inlista.length; i++) if( (inlista[i].gethk()>=min) && (inlista[i].gethk()<=max) ) antal++; res = new MotorFordon[antal]; // fungerar även då antal==0 for(int i=inlista.length-1; i>=0; i--) if( (inlista[i].gethk()>=min) && (inlista[i].gethk()<=max) ) { antal--; res[antal] = inlista[i]; return res; // Test av Uppgift 3 public static void main(string[] args){ MotorFordon[] fordon = {new MotorFordon("A",100), new MotorFordon("B",150),new MotorFordon("C",80), new MotorFordon("D",100),new MotorFordon("E",110); MotorFordon[] resultat = inomintervallet(fordon, 95, 110); for(int i=0; i<resultat.length; i++) System.out.println(resultat[i]); ------------------------------------------------------ public class Bil extends MotorFordon { private String regnr; public Bil() { regnr=""; public Bil(String ägare, int hk, String regnr) { super(ägare, hk); this.regnr = regnr; public void setregnr(string regnr) { this.regnr = regnr; public String getregnr() { 14

return regnr; public String tostring() { return super.tostring() + " Registreringsnummer: " + regnr; // Uppgift 4 public boolean equals(object o) { boolean lika = getclass().equals(o.getclass()); if(lika) { Bil b = (Bil) o; lika = regnr.equals(b.getregnr()); // Registreringsnummer unika return lika; ------------------------------------------------------ public class Motorcykel extends MotorFordon { private String regnr; public Motorcykel() { regnr=""; public Motorcykel(String ägare, int hk, String regnr) { super(ägare, hk); this.regnr = regnr; public void setregnr(string regnr) { this.regnr = regnr; public String getregnr() { return regnr; public String tostring() { return super.tostring() + " Registreringsnummer: " + regnr; // Uppgift 4 public boolean equals(object o) { boolean lika = getclass().equals(o.getclass()); if(lika) { Motorcykel m = (Motorcykel) o; lika = regnr.equals(m.getregnr()); // Registreringsnummer unika return lika; ------------------------------------------------------ public class Cykel extends Fordon { private int växlar=1; /** Creates a new instance of Cykel */ public Cykel() { public Cykel(String ägare, int växlar) { super(ägare); 15

this.växlar = växlar; public void setväxlar(int växlar) { this.växlar = växlar; public int getväxlar() { return växlar; public String tostring() { return super.tostring() + " Antal växlar: " + växlar; // Uppgift 4 public boolean equals(object o) { boolean lika = getclass().equals(o.getclass()); if(lika) { Cykel c = (Cykel) o; lika = (växlar == c.getväxlar()) && (super.equals(o)); return lika; public static void main(string[] args){ Cykel c1= new Cykel(); Cykel c2= new Cykel("Sven Jakobi",21); System.out.println(c1); System.out.println(c2); c1.setägare("inga Bok"); c1.setväxlar(3); System.out.println(c1.getÄgare() + " " + c1.getväxlar() + " växlar"); 16