Lab
12 : Experimenting with Polymorphism
Advanced
Programming - CS 239 Department of Computer Science
Getting Ready: Before going any further you should:
1. Make a directory on your N: drive for
this lab.
2. Setup your development environment.
3. Download the file named Document.java
4. Download the file named FormattedDocument.java
5. Download the file named Driver1.java
6. Download the file named Driver2.java
7. Make sure you understand
the classes you just copied. (Note: These classes are different from any
earlier versions you may have seen or used.)
Part I: This part of the lab will help you learn how to find
errors related to polymorphism.
8. Compile all of the classes and execute Driver1. Is
the output correct?
YESÏ Output is: |
9a. Execute Driver2. What is wrong with the output?
The document has 18 words but
it has more than 2 lines Output is:Ï |
9b. Why is the output incorrect? (Hint: Add output
statements that will help you debug the getLineCount() method.)
The getLineCount() method is using the
text attribute of Document class method while the text is being printed by
the FormattedDocument method |
Part II: This part of the lab reviews some issues involving
accessibility/visibility.
10a. Make the attribute, text,
in the Document class private. Re-compile the Document and FormattedDocument
classes (in that order). What compile-time errors are generated
«ÏjGRASP exec: javac A:\Lab12
-Polymorphism\FormattedDocument.java |
10b. Why were they generated?
because FormattedDocument was denied
access to parent’s text attribute (it doesn’t have its own text attribute. |
11a. Fix the problem (without changing the
accessibility/visibility of text). (Hint: How can a FormattedDocument object
get access to text if it's private?)
have the child call the parent’s getText
method |
|
11b. What did you do to fix the problem?
I stored the result of calling the
parent’s getText() method in a temporary variable. the StringTokenizer then
used the temporary variable (the copy) of the text |
|
12. Compile and execute Driver2. Is the output
correct?
It compiles but the output is still not
correct. It still says that there
are 18 words and 2 lines (when there are 18 words and 7 lines). |
|
Part II: This part of the lab will help you gain a better
understanding of polymorphism.
13. When the
getLineCount() message is sent to the object named, formatted, what code is executed?
the getLineCount() method of the Document
class using the unformatted text |
14. Replace
the getLineCount() method with the
contents of getLineCount.java and explain the changes .
a String called temp was declared (a new temporary String
variable) the current object’s getText() method was called. |
15. When the getLineCount() message is sent to the
object named formatted, what does this
refer to?
the FormattedObject |
16. Continuing with this same example, when the
getText() message is sent to this, what code is
executed?
the getText() method of the
FormattedObject which calls the Document getText() method |
17. Compile and run the driver. Is the output
correct?
Yes |
18. Compile and run the
original driver (i.e., the version that uses a Document object). Is the output
correct?
Yes |