Object-Oriented Programming with Java 

(a) Give three differences between an interface and an abstract class in Java. [3 marks] 

(b) A novice programmer writes the following code in order to be able to completely clone an object of type Car. 

public class Tyre { private int treadRemaining; 

public void SetTread(int t) { treadRemaining=t; } 

public int GetTread() { return treadRemaining; } } 

public class Car extends Vehicle implements Cloneable { private Tyre tyres[] = new Tyre[4]; 

public Car() { for (int i=0; i<4; i++) tyres[i] = new Tyre(); } 

public Object clone() throws CloneNotSupportedException { Car c = new Car(); 

c.tyres = this.tyres; return c; } } 

(i) Explain what it means for the treadRemaining field to be private. Explain why it is good programming practice for such fields to be private. [3 marks] 

(ii) Identify the type of interface that Cloneable is. What is the defining characteristic of such interfaces? [2 marks] 

(iii) Identify and explain two reasons why this code may not function as intended. [4 marks] 

(iv) Rewrite the code to address the problems you have identified and allow Car objects to be fully cloned. [8 marks] 1