# Instuderingsfrågor klasser och arv ### Begreppsfrågor Vad är en klass i Java? Hur skapar du en instans av en klass i Java? Vad är en konstruktor och hur skiljer den sig från en vanlig metod i en klass? Förklara begreppet arv (inheritance) i Java. Hur skapar du en klass som ärver från en annan klass i Java? Förklara vad det innebär att "overrida" en metod och ge ett exempel på hur det görs. Vad är polymorfism och hur används det i Java? Vad är en åtkomstmodifierare och vad används de till? Vad innebär det att en variabel i en klass är private? ### Analysera kod Vad kommer koden skriva ut? ```java public class MyClass { int x; public void printX() { System.out.println(x); } } public class Main { public static void main(String[] args) { MyClass obj = new MyClass(); obj.x = 5; obj.printX(); } } ``` Vad kommer koden skriva ut? ```java public class Person { String name; public Person() { this.name = "John Doe"; } public void displayName() { System.out.println(name); } } public class Main { public static void main(String[] args) { Person person = new Person(); person.displayName(); } } ``` Vad kommer koden skriva ut? ```java class Animal { void sound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void sound() { System.out.println("Dog barks"); } } public class Main { public static void main(String[] args) { Animal animal = new Animal(); Animal dog = new Dog(); animal.sound(); dog.sound(); } } ``` Vad kommer koden skriva ut? ```java public class Box { double width, height, depth; public Box(double width, double height, double depth) { this.width = width; this.height = height; this.depth = depth; } public double calculateVolume() { return this.width * this.height * this.depth; } public static void main(String[] args) { Box myBox = new Box(2.0, 3.0, 4.0); System.out.println("Volume: " + myBox.calculateVolume()); } } ``` ### Felsökning Vad är felet i koden nedan? ```java public class SimpleClass { int number; public static void main(String[] args) { SimpleClass obj = new SimpleClass(); System.out.println(obj.number); // Vad är felet här? } } ``` Vad är felet i koden nedan? ```java public class SimpleClass { String text; public SimpleClass(String input) { text = input; } public static void main(String[] args) { SimpleClass obj = new SimpleClass(); // Vad är felet här? System.out.println(obj.text); } } ``` Vad är felet i koden nedan? ```java class Animal { void makeSound() { System.out.println("Animal makes a sound"); } } class Dog extends Animal { void makeSound(String sound) { System.out.println(sound); } public static void main(String[] args) { Dog myDog = new Dog(); myDog.makeSound(); // Vad är felet här? } } ``` ### Skriva kod Nedan är en klass `Snack` som har en metod `eat`. Skriv en subklass till `Snack` som heter `Popcorn` och som har en som *overridar* `eat`-metoden. ```java class Snack{ void eat(){ System.out.println("The snack was eaten. Yum!"); } } ``` Nedan är en klass `Instrument` och några subklasser till den. Skriv några rader kod som skapar en lista av `Instrument` och med en for-loop anropar metoden `play` på varje instrument. ```java class Instrument{ void play(){ System.out.println("Playing") } } class Guitar extends Instrument{ @Override void play(){ System.out.println("Playing guitar") } } class Piano extends Instrument{ @Override void play(){ System.out.println("Playing piano") } } class Trumpet extends Instrument{ @Override void play(){ System.out.println("Playing trumpet") } } ``` ### Klassdiagram Tänk dig ett system för ett bibliotek som ska hålla koll på böcker och låntagare. I systemet ska man kunna markera böcker som lånade av en låntagare samt få ut listor av vilka böcker som är utlånade av en given låntagare. Gör ett klassdiagram över systemet. Bestäm först vilka klasser du behöver, vilka attribut och metoder de har och sedan vilka relationer de har till varandra.