// DEFINE A CONCEPTUAL PERSON
abstract class Person {
// FIELDS
String myName;
String myLanguage;
// CONSTRUCTOR
Person(String name, String language) {
this.myName = name;
this.myLanguage = language;
}
// METHODS
abstract String helloInMyLanguage();
String helloInEnglish() {
return "Hello!";
}
boolean speaks(String language) {
if (language == "English") {
return true;
}
else if (language == this.myLanguage) {
return true;
}
else {
return false;
}
}
void sayHello(Person otherPerson) {
String hello;
if (otherPerson.speaks(this.myLanguage)) {
hello = this.helloInMyLanguage();
}
else {
hello = this.helloInEnglish();
}
System.out.println(this.myName + ": " + hello);
}
}
// DEFINE A CONCEPTUAL PERSON FROM CHINA
class PersonFromChina extends Person {
// CONSTRUCTOR
PersonFromChina(String name) {
super(name, "Chinese");
}
// METHODS
// Implements abstract method Person.helloInMyLanguage
String helloInMyLanguage() {
return "Ni Hao";
}
// Overrides Person.helloInEnglish
String helloInEnglish() {
return "Hi";
}
}
// DEFINE A CONCEPTUAL PERSON FROM THE UNITED STATES
abstract class PersonFromUnitedStates extends Person {
// CONSTRUCTOR
PersonFromUnitedStates(String name) {
super(name, "English");
}
// METHODS
// Implements abstract method Person.helloInMyLanguage
String helloInMyLanguage() {
return helloInEnglish();
}
}
// DEFINE A CONCEPTUAL AMERICAN COWBOY
class AmericanCowboy extends PersonFromUnitedStates {
// CONSTRUCTOR
AmericanCowboy(String name) {
super(name);
}
// METHODS
// Overrides PersonFromUnitedStates.helloInEnglish
String helloInEnglish() {
return "Howdy!";
}
}
// DEFINE A CONCEPTUAL AMERICAN STUDENT
class AmericanStudent extends PersonFromUnitedStates {
// CONSTRUCTOR
AmericanStudent(String name) {
super(name);
}
// METHODS
// Overrides PersonFromUnitedStates.helloInEnglish
String helloInEnglish() {
return "What's up?";
}
}
// CREATE A COLLECTION OF ACTUAL PEOPLE
class People {
// FIELDS
static AmericanCowboy cowboy = new AmericanCowboy("John Wayne");
static AmericanStudent student1 = new AmericanStudent("David Spurgeon");
static AmericanStudent student2 = new AmericanStudent("Lara Spurgeon");
static PersonFromChina student3 = new PersonFromChina("Wang Xuesheng");
static PersonFromChina student4 = new PersonFromChina("Sun Xuesheng");
}
// DEFINE A CONCEPTUAL ENCOUNTER AND MAKE ONE HAPPEN
class Encounter {
// METHODS
static void begin(Person person1, Person person2) {
person1.sayHello(person2);
person2.sayHello(person1);
}
static void close() {
System.out.print("THE END");
}
public static void main(String[] args) {
begin(People.student2, People.student3); // BEGIN AN ACTUAL ENCOUNTER...
close(); // ...THEN CLOSE THE ENCOUNTER.
}
}