import java.util.*; import java.io.*; public class Pets1 { static String sName ="" ; static String sSchool ="Paschal High School" ; static String sLab = "Pets1"; static FileWriter oFile; //static String sFile="\\\\h010schms01\\stuhome$\\angela.johnston\\My Documents\\"; public static void main(String sArgs[])throws IOException { begin(); Pet oDog=new Dog("Hoang",50);//create pet objects from subclass constructors Pet oSnake=new Snake("Peter",80); Pet oDonkey=new Donkey("Ernie",3); Pet oChicken=new Chicken("Souvik",100); identify(oDog);//calls identify method under main method identify(oSnake); identify(oDonkey); identify(oChicken); end(); } public static void identify(Pet oWhat) {//prints out info on Pet object System.out.println(oWhat+"---"+oWhat.speak()+" "+oWhat.speak()+"!"); System.out.println(oWhat.getName()+" likes to "+oWhat.move()+" and"+ " likes to eat "+oWhat.eat()); System.out.println(); } public static void begin()throws IOException { Date oDate = new Date(); System.out.println(sName+" "+sSchool+" Lab: "+sLab); System.out.println(oDate); System.out.println("*************************** EXECUTION BEGINS ****************************"); System.out.println(); } public static void end()throws IOException { Date oDate = new Date(); System.out.println(); System.out.println("*************************** EXECUTION ENDS *****************************"); System.out.println(sName+" "+sSchool+" Lab: "+sLab+"**"); System.out.println(oDate+"\f"); } } abstract class Pet//parent class { private String name; public Pet(String petName)//constructor { name=petName; } public String getName() { return name; } public String toString() { return "pet "+name; } abstract public String speak(); //abstract methods have no implementation they're just implemented for //subclasses to use this means that you can't actually instantiate a Pet //object without one of the subclasses being used abstract public String move(); abstract public String eat(); } class Dog extends Pet { private int weight; public Dog(String dogName, int dogWeight) { super(dogName);//does what parent constructor did weight=dogWeight; } public int getWeight() { return weight; } public String toString() { return super.toString()+" is a dog, weighing "+weight+" pounds"; } public String speak() { return "woof"; } public String move() { return "run"; } public String eat() { return "Chicken"; } } class Snake extends Pet { private int length; public Snake(String snakeName, int snakeLength) { super(snakeName); length=snakeLength; } public int getLength() { return length; } public String toString() { return super.toString()+" is a snake, "+length+" inches long"; } public String speak() { return "hiss"; } public String move() { return "slither"; } public String eat() { return "mice"; } } class Donkey extends Pet { private int height; public Donkey(String donkeyName, int donkeyHeight) { super(donkeyName); height=donkeyHeight; } public int getHeight() { return height; } public String toString() { return super.toString()+" is a donkey, kicking "+height+" feet"; } public String speak() { return "hee-haw!"; } public String move() { return "stay"; } public String eat() { return "pigs"; } } class Chicken extends Pet { private int feathers; public Chicken(String chickenName, int chickenFeathers) { super(chickenName); feathers=chickenFeathers; } public int getWFeathers() { return feathers; } public String toString() { return super.toString()+" is a chicken, having "+feathers+" feathers"; } public String speak() { return "cluck"; } public String move() { return "strut"; } public String eat() { return "chicken nuggets"; } } //