8.5. Worked Example: Writing Classes - Overrides and Other¶
Subgoals for Writing a Class 4/4
Name it
Differentiate class-level (static) vs. instance/object-level variables
Differentiate class-level (static) vs. instance/object behaviors/methods
Define class variables (static) as needed ‘
Name
Data Type
public / private / final
Define instance variables (that you want to be interrelated)
Name
Data Type
private
Create constructor (behavior) that creates initial state of object
public
Same name as class
No return type
Default - no parameters
Logic - initialize all variables
Repeat as needed, adding parameters
Create 1 accessor and 1 mutator behaviors per attribute
Accessors
Name is get_<attr_name>
Public
Return type same data type as attribute
No parameters
Logic - return value
Mutators
Name is set_<attr_name>
Public
Return type is void
Parameter is same data type as attribute
Logic validates input parameter and sets attribute value
Write toString method
public
Returns String
No parameters
Logic - convert needed attributes to a format that can be printed
Write equals method
public
Returns boolean
Parameter - instance of the class
Logic - compare attributes for equity
Create additional methods as needed
You can watch this video or read through the content below it.
Problem: We will be writing a class to represent an instance of time, like a specific time in the day.
Now write toString, equals, and any other methods we need.
SG8: Write toString method
public
Returns String
No parameters
Logic - convert needed attributes to a format that can be printed
public String toString() {
String holder= "";
if (hour < 10)
holder = "0";
holder += hour + ":";
if (minute < 10)
holder += '0';
holder += (minute + ":");
if (second < 10)
holder += '0';
holder += second;
return holder;
}
SG9: Write equals method
public
Returns boolean
Parameter - instance of the class
Logic - compare attributes for equity
public boolean equals (TimeType other) {
return (hour == other.hour &&
minute == other.minute &&
second == other.second);
// alternate logic
// return toString().equals(other.toString());
}
SG10: Write other methods
For additional functionality, we will implement two more instance methods.
public void increment() {
second++;
if (second > 59) {
second = 0;
minute++;
}
if (minute > 59) {
minute = 0;
hour++;
}
if (hour > 23) {
hour = 0;
}
}
public boolean lessThan (TimeType other) {
boolean result = false;
if (hour < other.hour)
result = true;
else if (hour > other.hour)
result = false;
else {
if (minute < other.minute)
result = true;
else if (minute > other.minute)
result = false;
else {
if (second < other.second)
result = true;
else
result = false;
}
}
return result;
}
After writing methods, this is a good time to review the structure of the class and test with a main driver program.
public static void main (String [] args) {
TimeType noon = new TimeType(12, 0, 0);
System.out.println("noon: " + noon); //concat auto-calls toString
TimeType dueTime = new TimeType(23, 59, 59);
System.out.println("The due time is " + dueTime);
for (int i = 0; i < 362; i++) {
dueTime.increment();
System.out.println("The due time is " + dueTime);
}
if (dueTime.lessThan(noon))
System.out.println("dueTime less");
else
System.out.println("noon less");
}
Practice Pages