![Page 1: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/1.jpg)
TeachJava! 2003
Corky Cartwright
Dung Nguyen
Stephen WongCharlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf
![Page 2: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/2.jpg)
From C++ To Java
• C++ and Java have similar syntax.Don’t be misled!
• Profoundly different semantics: high-level objects vs. bytes in memory
• Profoundly different programming models:Java is object-oriented (OO)C++ is object-based (OB) in normal usage
![Page 3: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/3.jpg)
Encouraging Note
• Writing OO programs in Java is remarkably easy—provided we recognize that it is fundamentally different than writing OB programs in C++.
• There is little common conceptual ground, other than syntactic conventions, beween OO programing (OOP) in Java and OB programming in C++
![Page 4: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/4.jpg)
Guiding Vision
• Program design in Java is data-directed.Design the data abstractions first; they will determine the structure of the code. In OOP circles, this data design process is often called object-modeling.
• Common data abstractions are codified as design patterns.
![Page 5: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/5.jpg)
Secondary Theme
• DrJava, our lightweight, reactive environment for Java, facilitates active learning; with DrJava learning Java is a form of exploration.
• DrJava is not a toy; DrJava is developed using DrJava. It includes everything that we believe is important and nothing more.
![Page 6: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/6.jpg)
What Is an Object?
• Collection of fields representing the properties of a conceptual or physical object.
• Collection of operations called methods for observing and changing the fields of the object.
These fields and methods often called the members of the object.
![Page 7: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/7.jpg)
Example: Phone Directory
• Task: maintain a directory containing the office address and phone number for each person in the Rice Computer Science Dept.
• Each entry in such a directory has a natural representation as an object with three fields containing a person’s– name – address – phone number
represented as character strings.
![Page 8: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/8.jpg)
Summary of Entry format
• Fields:– String name
– String address
– String phone
–
• Methods:– String getName()
– String getAddress()
– String getPhone()
![Page 9: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/9.jpg)
Java Method Invocation
• A Java method m is executed by sending a method call o.m()
to an object o, called the receiver. The method m must be a member of o.
• The code defining the method m can refer to the receiver using the keyword this.
![Page 10: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/10.jpg)
Finger Exercise
In the DrJava programming environment, open the program file Entry.java, compile it, and type the following statements in the Interactions pane: Entry e = new Entry("Corky","DH 3104","x 6042"); e.getName() e.getPhone()
![Page 11: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/11.jpg)
Java Expressions
• Java supports essentially the same expressions over primitive types (int, float, double, boolean) as C++.
• Notable differences: – boolean is a distinct type from int
– no unsigned version of integer types– explicit long type
![Page 12: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/12.jpg)
Finger Exercise
Evaluate the following:-5 + 3-(5 + 3)5 % 35./3.5 / 05./0.5 < 65. > 6.
![Page 13: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/13.jpg)
Finger Exercise cont.
72. - 32. * 1.8(72. - 32.) * 1.872. - 30. - 12.72. - (30. - 12.)
![Page 14: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/14.jpg)
Java Statements
• Essentially the same form as in C++: assignment, if, while, for, return, …
• But well-written Java programs consist primarily of assignment, if, and return statements (with smattering of for).
• Focus on assignment and if for most of the week.
![Page 15: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/15.jpg)
Assignment
• Restricted form of assignment: variable definition
type var = exp;
• Example
int x = 5;
![Page 16: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/16.jpg)
Finger Exercise
int x = 5;x*xdouble d = .000001;double dd = d*d;dddd*dd1. + dd1. + dd*dd
![Page 17: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/17.jpg)
Finger Exercise cont.• Evaluate:
int x = 7;if (x = 5) y = 0; else y = 10; y
Did you get the behavior that you expected? Repeat the exercise with corrected syntax.
• Evaluate:boolean switch1 = (x = 7);switch1
Repeat the exercise with corrected syntax.
![Page 18: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/18.jpg)
Classes: Object Templates
• A Java program is a collection of classes.
• A class is an object template consisting of a collection of members—fields and methods— plus a constructor, which is a special method used to initialize objects when created.
![Page 19: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/19.jpg)
Example: Class Entryclass Entry {
/* fields */ String name; String address; String phone;
/* constructor */ Entry(String n, String a, String p) { this.name = n; this.address = a; this.phone = p; }
/* accessors */ String getName() { return this.name; } String getAddress() { return this.address; } String getPhone() { return this.phone; }}
![Page 20: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/20.jpg)
Finger Exercise
In the Definitions pane of DrJava, enter the Java program defining the Entry class. In the Interactions pane, evaluate the following program text: Entry e = new Entry("Corky", "DH 3104", "x 6042");e.getName()e.getAddress()e.getPhone()
Save your program for future use in a file named Entry.java.
![Page 21: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/21.jpg)
Java Data Types
• Two fundamental categories– Primitive types: int, boolean, double, float,
char, long, short, byte (first three are most common)
– Object types: all class instances (objects) belong to object types, which are disjoint from the primitive types
• Values of primitive type (e.g., true, 0) are not objects
![Page 22: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/22.jpg)
Object Types
• Organized in a strict hierarchy with the universal type Object at the top.
• Every class C except Object has an immediate superclass, which is the parent of C in the hierarchy. In a class definition (like our Entry example), the default superclass is Object.
• A descendant in the class hierarchy is called a subclass. B is a subclass of A iff A is a superclass of B. Entry is a subclass of Object; Object is a superclass of Entry.
![Page 23: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/23.jpg)
null
• There is a special value null of object type on which method invocation utterly fails.
• null is a reference to nothing; the method invocation
null.m()
always generates a NullPointerException aborting execution.
![Page 24: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/24.jpg)
Example: the String class• The String class is built-in to Java, just like Object.• Finger Exercise: evaluate
String s = "Corky";Object o = s;oo == sString t = "Cork" + "y”;t == ss.length()o = null;o.length()
• Morals: – multiple copies of the same String may exist; do not use ==
to test String equality.
– Do not use null to represent legitimate data values.
![Page 25: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/25.jpg)
Object Types cont.
• Each subclass C inherits (includes) all of the members of its superclass.
• The declared members of C augment the inherited members with one exception: if C declares a method m with exactly the same name and types as an inherited method, then the new definition of m overrides (replaces) the inherited definition.
![Page 26: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/26.jpg)
Inheritance from Object
• The Object class has several members that its children inherit. They include the methods– public String toString() which gives a String
representation for the object.– public boolean equals(Object o) which
compares this to o
![Page 27: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/27.jpg)
Example of Overridingclass Entry {
/* fields */ String name; String address; String phone;
/* constructor */ Entry(String n, String a, String p) { this.name = n; this.address = a; this.phone = p; }
/* accessors */ String getName() { return this.name; } String getAddress() { return this.address; } String getPhone() { return this.phone; }
/* overridden methods */ public String toString() { return "[" + name + address + phone + "]"; }}
![Page 28: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/28.jpg)
Finger Exercise
• Open your Entry class into the DrJava Interactions pane.• Compile your program and evaluate:
Entry e = new Entry("Corky", "DH 3104", "x 6042");
e • Add the definition of toString() from the previous slide
to your Entry class.• Compile your program and evaluate:
Entry e = new Entry("Corky", "DH 3104", "x 6042"); e
![Page 29: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/29.jpg)
Adding a Method Definitionclass Entry { … /** return this if its name matches keyName; otherwise
return null indicating failure */Entry match(String keyName) { if (keyName.equals(this.name)) return this; else return null
}}
Finger Exercise: Add this method definition to your Entry
class, compile it, and evaluate: Entry e = new Entry("Corky", "DH 3104", "x 6042"); e.match("Corky") e.match("Matthias")
![Page 30: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/30.jpg)
The Wrapper Classes
• How do we treat primitive values as objects? Java includes a built-in “wrapper” class for each primitive type.
• Examples: – Integer is the wrapper class for int
– Boolean is the wrapper class for boolean
– Double is the wrapper class for double
![Page 31: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/31.jpg)
Finger Exercise
In the DrJava Interactions evaluate the following:
Integer i = new Integer(5);iInteger j = i;i == jInteger k = new Integer(5);i == k
![Page 32: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/32.jpg)
Constructors• Given a class definition, Java provides a mechanism called new for creating
new instances of the class. • To exploit the new, the class must provide a special method called a
constructor that specifies how the fields of the created object are initialized. • A constructor method has the same name as the class and does not contain
the return type in the heading.
• Example: Entry(String n, String a, String p) {
this.name = n; this.address = a; this.phone = p; }
• If a class does not include a constructor, Java provides a default constructor (of no arguments) that does nothing.
![Page 33: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/33.jpg)
Finger Exercise
Add a second constructor Entry(String n) { … }
to the Entry class where n specifies the name of the entry. Use any reasonable default value, e.g., "unknown" for the address and phone fields.
Recompile your program and evaluate the expression
new Entry("Matthias")
![Page 34: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/34.jpg)
Union Pattern
• The union pattern is used to represent different forms of related data with some common behavior.
• The pattern consists of an abstract class A together with a collection of variant subclasses B1, ..., BN
extending A. An abstract class cannot be instantiated using new.
• The common behavior is codified by a set of methods in A, which may be abstract Each such method m has an associated contract that that the implementation in each variant class must obey.
![Page 35: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/35.jpg)
City Directory Example
• Assume that we want to design the data for an online city phone book. In contrast to our DeptDirectory example, such a directory will contain several different kinds of listings: businesses, residences, and government agencies.
• The entry data for such a directory is represented by using the union pattern to identify the common behavior among the various kinds of listings.
• In this case, the common behavior is the existence of a String name for the listing and the String text of the listing (given by toString()).
![Page 36: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/36.jpg)
CityEntryabstract class CityEntry { /** Returns the name for the entry */ abstract String getName(); /** Returns all of the information in the listing */ /* String toString() */}
class BusinessEntry extends CityEntry { String name, address, phone, city, state; BusinessEntry(String n, String a, String p, String c, String s) { this.name = n; this.address = a; this.phone = p; this.city = c; this.state = s; } String getName() { return this.name; } String getAddress() { return this.address; } String getPhone() { return this.phone; } String getCity() { return this.city; } String getState() { return this.state; } public String toString() {
return "Business[" + this.name + "," + this.address + "," + this.phone + "," + this.city + "," + this.state + "]"; }}
![Page 37: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/37.jpg)
CityEntry cont.class GovernmentEntry extends CityEntry { String name, address, phone, city, state, government; GovernmentEntry(String n, String a, String p, String c, String s, String g) { this.name = n; this.address = a; this.phone = p; this.city = c; this.state = s; this.government = g; } String getName() { return this.name; } String getAddress() { return this.address; } String getPhone() { return this.phone; } String getCity() { return this.city; } String getGovernment() { return this.state; } String getState() { return this.government; } public String toString() {
return "Government[" + this.name + "," + this.address + "," + this.phone + "," + this.city + "," + this.state + "," + this.government + "]"; }}class Residential Entry extends CityEntry { String name, address, phone, city; ResidentialEntry(String n, String a, String p) { this.name = n; this.address = a; this.phone = p; } String getName() { return this.name; } String getAddress() { return this.address; } String getPhone() { return this.phone; } public String toString() {
return "Residential[" + this.name + "," + this.address + "," + this.phone + "]"; }}
![Page 38: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/38.jpg)
Member Hoisting
• In a union hierarchy, the same code may be repeated in every variant.
• A cardinal rule of software engineering is never duplicate code. We can eliminate code duplication in a union hierarchy by hoisting duplicated code (code that is invariant within the union) into the abstract class at the route of the hierachy
![Page 39: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/39.jpg)
CityEntry Example
We can hoist the fields name, address, and phone and the getters getAddress and getPhone. To perform this transformation we must introduce a constructor in the abstract class CityEntry
to initialize the fields declared in the class. This constructor can be called from subclass constructors by using the special method name super.
![Page 40: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/40.jpg)
CityEntry IIabstract class CityEntry { String name, address, phone; CityEntry(String n, String a, String p) { name = n; address = a; phone = p; } String getName() { return name; } String getAddress() { return address; } String getPhone() { return phone; } /** Returns all of the information in the listing */ /* String toString() */}class BusinessEntry extends CityEntry { String city, state; BusinessEntry(String n, String a, String p, String c, String s) { super(n,a,p); this.city = c; this.state = s; } String getCity() { return this.city; } String getState() { return this.state; } public String toString() {
return "Business[" + this.getName() + "," + this.getAddress() + "," + this.getPhone() + "," + this.city + "," + this.state + "]"; }}
![Page 41: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/41.jpg)
CityEntry II cont.
class GovernmentEntry extends CityEntry { String city, state, government; GovernmentEntry(String n, String a, String p, String c, String s, String g) { super(n,a,p); this.city = c; this.state = s; this.government = g; } String getCity() { return this.city; } String getState() { return this.state; } String getGovernment() { return this.government; } public String toString() {
return "Government[" + this.getName() + "," + this.getAddress() + "," + this.getPhone() + "," + this.city + "," + this.state + "," + this.government + "]"; }}
class ResidentialEntry extends CityEntry { ResidentialEntry(String n, String a, String p) { super(n,a,p); } public String toString() {
return "Residential[" + this.name + "," + this.address + "," + this.phone + "]"; }}
![Page 42: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/42.jpg)
Partial Hoisting
• In a union hierarchy, the same code may be repeated in some proper subset of the variants.
• We can eliminate this code duplication by introducing a new abstract class that is a superclass only of the variants that repeat the same code.
![Page 43: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/43.jpg)
CityEntry III
abstract class CityEntry { String name, address, phone; CityEntry(String n, String a, String p) { name = n; address = a; phone = p; } String getName() { return name; } String getAddress() { return address; } String getPhone() { return phone; } /** Returns all of the information in the listing */ /* String toString() */}
abstract class NonResidentialEntry { String city, state; NonResidentialEntry(String n, String a, String p, String c, String s) { super(n, a, p); city = c; state = s; } String getCity() { return this.city; } String getState() { return this.state; }}
![Page 44: TeachJava! 2003 Corky Cartwright Dung Nguyen Stephen Wong Charlie Reis, James Hsia, Neal Hororwitz, Peter Centgraf](https://reader035.vdocuments.us/reader035/viewer/2022062722/56649f285503460f94c410b2/html5/thumbnails/44.jpg)
CityEntry III cont.class BusinessEntry extends NonResidentialEntry { BusinessEntry(String n, String a, String p, String c, String s) { super(n,a,p,c,s); } public String toString() { return "Business[" + this.getName() + "," + this.getAddress() + "," + this.getPhone() + "," + this.getCity() + "," + this.getState() + "]"; }}class GovernmentEntry extends CityEntry { String government; GovernmentEntry(String n, String a, String p, String c, String s, String g) { super(n,a,p,c,s); this.government = g; } String getGovernment() { return this.government; } public String toString() {
return "Government[" + this.getName() + "," + this.getAddress() + "," + this.getPhone() + "," + this.getCity() + "," + this.getState() + "," + this.getGovernment() + "]"; }}class Residential Entry extends CityEntry { ResidentialEntry(String n, String a, String p) { super(n,a,p); } public String toString() {
return "Residential[" + this.name + "," + this.address + "," + this.phone + "]"; }}