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";
}
}
//