principles of computer science ii
DESCRIPTION
Principles of Computer Science II. Prof. Nadeem Abdul Hamid CSC 121 – Spring 2006 Lecture Unit 4 - Inheritance. Inheritance. Extending classes by adding methods and fields Extended class = “Superclass” Extending class = “Subclass” - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/1.jpg)
1
Principles of Computer Science II
Prof. Nadeem Abdul HamidCSC 121 – Spring 2006
Lecture Unit 4 - Inheritance
![Page 2: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/2.jpg)
2
Inheritance
Extending classes by adding methods and fields Extended class = “Superclass” Extending class = “Subclass”
Inheriting from a class is not the same as implementing an interface Subclass inherits behavior and state
Advantage of inheritance: Code reuse
CSC121 — Berry College — Spring 2006
![Page 3: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/3.jpg)
3
Inheritance Diagram
Every class in Java extends the Object class either directly or indirectly
![Page 4: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/4.jpg)
4
Inheritance Hierarchies
Sets of classes can form complex inheritance hierarchies
![Page 5: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/5.jpg)
5
Swing Example
![Page 6: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/6.jpg)
6
Subclass Methods Inherit method:
Don’t supply a new implementation of a method that exists in superclass
Superclass method can be applied to the subclass objects Override method:
Supply a different implementation of a method that exists in the superclass
Must have same signature (same name and same parameter types)
If method is applied to an object of the subclass type, the overriding method is executed
Add method: Supply a new method that doesn’t exist in the superclass New method can be applied only to subclass objects
![Page 7: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/7.jpg)
7
Instance Fields
Can’t override fields Can:
Inherit a field: All fields from the superclass are automatically inherited
Add a field: Supply a new field that doesn’t exist in the superclass
What if you define a new field with the same name as a superclass field? Each object would have two instance fields of the same
name Fields can hold different values Legal but extremely undesirable
![Page 8: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/8.jpg)
8
Instance Fields
// COMPILE ERROR ******
class A { private int x;
//...}
class B extends A {//...
public void methodB() {x = 2;
}}
![Page 9: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/9.jpg)
9
Common Error: Shadowing Fields
public class CheckingAccount extends BankAccount { public void deposit(double amount) { transactionCount++; balance = balance + amount; } . . .
private double balance; // Don't }
![Page 10: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/10.jpg)
10
Invoking Superclass Methodsclass A { public void method() {
System.out.println( "Method A" ); }}
class B { public void method() {
method(); // infinite call to itselfSystem.out.println( "Method B" );
}}
class A { public void method() {
System.out.println( "Method A" ); }}
class B { public void method() {
super.method();System.out.println( "Method B" );
}}
![Page 11: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/11.jpg)
11
Subclass Constructors
super followed by a parenthesis indicates a call to the superclass constructor
Must be the first statement in subclass constructor If subclass constructor doesn’t call superclass
constructor, default superclass constructor is used Default constructor: constructor with no parameters If all constructors of the superclass require parameters,
then the compiler reports an error
![Page 12: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/12.jpg)
12
Converting Types
Ok to convert subclass reference to superclass reference
SavingsAccount collegeFund = new SavingsAccount(10);BankAccount anAccount = collegeFund;Object anObject = collegeFund;
![Page 13: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/13.jpg)
13
Converting Between Types Superclass references don't know the full story:
When you convert between a subclass object to its superclass type: The value of the reference stays the same–it is the memory
location of the object But, less information is known about the object
Why would anyone want to know less about an object? Reuse code that knows about the superclass but not the subclass:
Can be used to transfer money from any type of BankAccount
anAccount.deposit(1000); // OKanAccount.addInterest(); // No--not a method of the class to which anAccount belongs
public void transfer(double amount, BankAccount other) { withdraw(amount); other.deposit(amount);}
![Page 14: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/14.jpg)
14
Casting Object Types
Occasionally you need to convert from a superclass reference to a subclass reference
This cast is dangerous: if you are wrong, an exception is thrown
Solution: use the instanceof operator instanceof: tests whether an object belongs to a
particular type
BankAccount anAccount = (BankAccount) anObject;
if (anObject instanceof BankAccount) { BankAccount anAccount = (BankAccount) anObject; . . .
![Page 15: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/15.jpg)
15
Polymorphism
In Java, type of a variable doesn't completely determine type of object to which it refers
Method calls are determined by type of actual object, not type of object reference
Compiler needs to check that only legal methods are invoked
BankAccount aBankAccount = new SavingsAccount(1000);// aBankAccount holds a reference to a SavingsAccount
BankAccount anAccount = new CheckingAccount();anAccount.deposit(1000); // Calls "deposit" from CheckingAccount
Object anObject = new BankAccount();anObject.deposit(1000); // Wrong!
![Page 16: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/16.jpg)
16
Polymorphism
Polymorphism: ability to refer to objects of multiple types with varying behavior
Polymorphism at work:
Depending on types of amount and other, different versions of withdraw and deposit are called
public void transfer(double amount, BankAccount other) { withdraw(amount); other.deposit(amount);}
![Page 17: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/17.jpg)
17
Access Control
Java has four levels of controlling access to fields, methods, and classes: public - Can be accessed by methods of all
classes private - Can be accessed only by the methods
of their own class package access (default) - Can be accessed by
all classes in the same package (folder) protected - Can be accessed by all subclasses
and by all classes in the same package
![Page 18: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/18.jpg)
18
Recommended Access Levels Instance and static fields: Always private. Exceptions:
public static final constants are useful and safe Some objects, such as System.out, need to be accessible to all
programs (public) Occasionally, classes in a package must collaborate very closely
(give some fields package access); inner classes are usually better
Methods: public or private Classes and interfaces: public or package
Better alternative to package access: inner classes In general, inner classes should not be public (some exceptions
exist, e.g., Ellipse2D.Double)
Beware of accidental package access (forgetting public or private)
![Page 19: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/19.jpg)
19
Object: The Cosmic Superclass
All classes defined without an explicit extends clause automatically extend Object
![Page 20: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/20.jpg)
20
Object Class Methods
Most useful methods: String toString() boolean equals(Object otherObject) Object clone()
Good idea to override these methods in your classes
![Page 21: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/21.jpg)
21
The toString() method
Returns a string representation of the object Useful for debugging:
toString is called whenever you concatenate a string with an object:
Object.toString prints class name and the hash code of the object
Rectangle box = new Rectangle(5, 10, 20, 30);String s = box.toString();// Sets s to "java.awt.Rectangle[x=5,y=10,width=20,height=30]"
"box=" + box;// Result: "box=java.awt.Rectangle[x=5,y=10,width=20,height=30]"
BankAccount momsSavings = new BankAccount(5000);String s = momsSavings.toString();// Sets s to something like "BankAccount@d24606bf"
![Page 22: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/22.jpg)
22
Overriding the toString() method
To provide a nicer representation of an object, override toString:
This works better:
public String toString() { return "BankAccount[balance=" + balance + "]";}
BankAccount momsSavings = new BankAccount(5000);String s = momsSavings.toString();// Sets s to "BankAccount[balance=5000]"
![Page 23: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/23.jpg)
23
The equals() method
Tests for equal contents:
Figure 9:Two References to Equal Objects
![Page 24: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/24.jpg)
24
The equals() method
== tests for equal location
Figure 10:Two References to the Same Object
![Page 25: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/25.jpg)
25
Overriding equals()
Define the equals method to test whether two objects have equal state
When redefining equals method, you cannot change object signature; use a cast instead:
(You should also override the hashCode method so that equal objects have the same hash code)
public class Coin { . . . public boolean equals(Object otherObject) { Coin other = (Coin) otherObject;
return name.equals(other.name) && value == other.value; } . . .}
![Page 26: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/26.jpg)
26
The clone() method
Copying an object reference gives two references to same object
Sometimes, you need to make a copy of the object
BankAccount account2 = account;
![Page 27: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/27.jpg)
27
The clone() method
Define clone method to make new object (see Advanced Topic 13.6)
Use clone:
Must cast return value because return type is Object
BankAccount clonedAccount = (BankAccount) account.clone();
![Page 28: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/28.jpg)
28
The Object.clone() method
Creates shallow copies
![Page 29: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/29.jpg)
29
Object.clone()…
Does not systematically clone all subobjects Must be used with caution It is declared as protected; prevents from
accidentally calling x.clone() if the class to which x belongs hasn't redefined clone to be public
You should override the clone method with care (see Advanced Topic 13.6)
![Page 30: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/30.jpg)
30
Scripting Languages
Integrated with software for purpose of automating repetitive tasks
Script: Very high-level, often short, program, written in a high-level scripting language
Scripting languages: Unix shells, Tcl, Perl, Python, Ruby, Scheme, Rexx, JavaScript, VisualBasic, ...
![Page 31: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/31.jpg)
31
Characteristics of a script
Glue other programs together Extensive text processing File and directory manipulation Often special-purpose code Many small interacting scripts may yield a big
system Perhaps a special-purpose GUI on top Portable across Unix, Windows, Mac Interpreted program (no compilation+linking)
![Page 32: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/32.jpg)
32
Why Scripts?
Features of Perl and Python compared with Java, C/C++ and Fortran: shorter, more high-level programs much faster software development more convenient programming you feel more productive
Reasons: no variable declarations, but lots of consistency
checks at run time lots of standardized libraries and tools
![Page 33: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/33.jpg)
33
Python - Prime Numbers
result = [1] candidates = range(3,1000) base = 2 product = base
while candidates: while product < 1000: if product in candidates: candidates.remove(product) product = product+base result.append(base) base = candidates[0] product = base del candidates[0]
result.append(base) print result
![Page 34: Principles of Computer Science II](https://reader035.vdocuments.mx/reader035/viewer/2022062321/5681348c550346895d9b717b/html5/thumbnails/34.jpg)
34
Python - Address Book
# create an empty address book dictionaryaddressBook = {}
# read entries till an empty stringprint name = raw_input("Type the Name - leave blank to finish")while name != "": entry = raw_input("Type the Street, Town, Phone. Leave blank to finish") addressBook[name] = entry name = raw_input("Type the Name - leave blank to finish")
# now ask for one to displayname = raw_input("Which name to display?(blank to finish)")while name != "": print name, addressBook[name] name = raw_input("Which name to display?(blank to finish)")