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