//no imports needed here //abstract classes cannot be instantiated, only extended abstract class Vehicle { //private member variables is good encapsulation, but subclasses need protected, which works just as well in this case protected final int fuelCapacity; // Java uses final to indicate a constant. I believe const works as well protected int fuelLevel; protected boolean running; //Vehicle has to initalize the constant fuelCapacity // this is also inderited by subclasses public Vehicle(int fCap) { fuelCapacity = fCap; running = false; } public int getFuelCapacity() { return fuelCapacity; } // a practice of mine: public int getFuelLevel() { return fuelLevel; } // making things line up public boolean isRunning() { return running; } // javadoc comment, not going into detail on that yet /** returns true if full */ public boolean setFuelLevel(int x) { if(x > fuelCapacity) x = fuelCapacity; // encapsulation in action fuelLevel = x; return fuelLevel == fuelCapacity; // comparison, same an C++ } // left up to subclasses to decide how this works /** should return true if successful */ public abstract boolean start(); }// end of Vehicle class Car extends Vehicle { public Car() { super(40); // calls super-class constructor } public boolean start() { if(running == true ) { return false; } // it's already running, so we can't start it running = true; return true; } } public class Example { public static void main(String[] args) { Car theCar = new Car(); //Vehicle myRide = new Vehicle(); // compiler error, class is abstract Vehicle myRide = theCar; // works, Car is a subtype of Vehicle myRide.start(); System.out.println(myRide.isRunning()); // prints true } }
That should do it. Any questions, leave 'em in the comments.
I'll wait a couple days, but the next post should be the uChat source with comments similar to this. Then we'll go from there. The 3 main areas to cover are threads, network communication, and GUI creation. What sounds the most interesting?
No comments:
Post a Comment