/** * Aktor * Del av lösningsförslag FK:P VT02 Lektion 3 * Rotklass i starwarshierarkin * * * @author Jozef */ abstract class Aktor{ // Alla objekt av alla subklasser delar på ett Randomobjekt protected static java.util.Random slumpen=new java.util.Random(); // Attribut som alla har (namn och humör har inga självklara init-värden) protected String namn; protected boolean modig=slumpen.nextBoolean(), trött=false; protected int liv=10, humör; // Tvinga subklasser att ange initialvärden för namn och humör // Konstruktorn behöver inte vara protected egentligen, det är // endast subklasser som kan använda den ändå eftersom klassen // är abstract protected Aktor(String namn, int humör){ this.namn=namn; this.humör=humör; } // Aktor-konstruktorn // Abstrakta metoder, implementeras på olika sätt i subklasserna public abstract void bliFörolämpad(); public abstract void bliSkadad(int kraft); public abstract int kraften(); // attackera är inte abstrakt själv, men använder abstrakta metoder public void attackera(Aktor vem){ vem.bliFörolämpad(); vem.bliSkadad(kraften()); } // attackera // De flesta äter på samma sätt, de som inte gör det kan överskugga // denna metod public void äter(){ trött=false; liv++; } // äter // Skapar och returnerar en sträng med strängrepresentationen av // Aktordelen av objektet. Detta är en överskuggning av en metod // som ärvts från superklassen till alla klasser: Object // System.out.println() anropar denna metod vid utskrift // Anropet getClass().getName() ger en sträng med klassnamnet. public String toString(){ return getClass().getName() + ": " + namn + ((modig)?" modig":" feg") + " humör:" + humör + ((trött)?" trött":" pigg") + " liv:" + liv + " kraft:" + kraften(); } // toString } // Aktor