/******************************************************************************\
* Name:
* Login:
* Precept:
*
* Description:
* - simulates a person (not in the Terminator/Blade Runner sense)
* - demonstrates defining static/non-static fields and methods
* - demonstrates calling these methods with two different syntaxes
*
* Dependencies: StdOut.java
\******************************************************************************/
public class Person {
// static variable: number of people
private static int population = 0;
// static variables are shared by all instances of a class
// note: static (non-constant) variables are considered bad style
// for this course, but it is illustrative for this example
private int age; // instance variable: age of this person
private String name; // instance variable: name of this person
// constructor
public Person(int a, String n) {
age = a; // copy constructor arg to instance var
name = n; // copy constructor arg to instance var
population++; // increase static counter
}
// static method (cannot access instance variables)
public static void printPop() {
StdOut.println("The population is " + population);
}
// instance method
public void printName() {
StdOut.println("My name is " + name + ".");
}
// instance method: return name and age
public String toString() {
return "Name: " + name + " Age: " + age;
}
public static void main(String[] args) {
// calling a static method using class-dot
// what is the output?
Person.printPop();
// how many instances does this construct?
Person myMom = new Person(33, "Donna");
Person myAunt = new Person(44, "Judy");
Person myChauffeur = myMom;
// calling an instance method using instance-dot
// what is the output?
myAunt.printName();
// calling an instance method implicitly
// what is the output?
StdOut.println(myMom);
// calling a static method without class name
// (uses Person, the containing class, by default)
// what is the output?
printPop();
}
}