This is the code encompassing the exercises of chapter 12,
Code: Select all
package begin010;
import java.util.ArrayList;
import java.util.List;
public class TestClass {
//Main ***********************************************
	public static void main(String[] args) {
		Vehicle b = new Car();
		Vehicle c = new Truck();
		System.out.println(c.getFeature("width"));
		System.out.println(b.getFeature("bumper"));
		b.start();
		c.start();
	}
}
// Interfaces ****************************************
interface Drivable {
	final List<String> features = new ArrayList<String>();
	void drive();
	void start();
}
interface VehicleHelper {
	static void register(Vehicle v) {
		System.out.println(v.vin);
	}
}
// Abstract class  **********************************
abstract class Vehicle implements Drivable, VehicleHelper {
	protected static int VIN;
	private String make;
	private String model;
	int vin = VIN;
	static {
		VIN = 0;
		features.add("heigth");
		features.add("width");
		features.add("length");
		features.add("power");
		features.add("boot capacity");
	}
	public Vehicle() {
		vin = VIN++;
		VehicleHelper.register(this);
	}
	public String getMakeAndModel() {
		return this.make + "    " + this.model;
	}
	public final int getVIN() {
		return this.vin;
	}
	public String getFeature(String featureName) {
		return (features.contains(featureName)) ? "This vehicle has this feature." : "N. A";
	}
}
// Classes **********************************************
class Car extends Vehicle {
	@Override
	public void drive() {
	}
	@Override
	public void start() {
		System.out.println("Start car");
	}
}
class Truck extends Vehicle {
	@Override
	public void drive() {
	}
	@Override
	public void start() {
		System.out.println("Start truck");
	}
}
In abstract classes is it better instance initializers or constructors?
Thanks