cs120: inheritance - flyn computing
TRANSCRIPT
CS120: Inheritance
W. Michael Petullo
University of Wisconsin–La Crosse
As of March 1, 2021
Inheritance: Book Example
These slides, along with the slides from the “writing classes” lecture, serve as
companions to Chapters 12–14 of the course book. The book provides an example
program that models a card game called Crazy Eights. The course website provides a
link to a simplified version of this game on its schedule page.
Interfaces: Macdonald UML
Animal
+speak()
Pig
-weight : int
+getWeight(): int+eat(weight:int)+speak()
Cow
-weight : int
+getWeight(): int+eat(weight:int)+speak()
Chicken
-weight : int
+getWeight(): int+eat(weight:int)+speak()
The classes Pig, Cow, and Chicken implement the interface Animal. This means thatyou can assign an object of type Pig, Cow, or Chicken to a variable of type Animal.This will invoke Pig’s speak method despite p being an Animal:
Animal p = new Pig ( ) ;p . speak ( ) ;
Inheritance: Macdonald2 UML
Animal
-weight : int
+getWeight(): int+eat(weight:int)+speak()
Pig
+speak()
Cow
+speak()
Chicken
+speak()
The classes Pig, Cow, and Chicken specialize Animal’s speak method, but they shareAnimal’s implementation of getWeight and eat. This will invoke Pig’s speak, ratherthan Animal’s speak:
Animal p = new Pig ( ) ;p . speak ( ) ;
Inheritance: Specialization
c l a s s Animal {. . .
}
c l a s s Pig extends Animal {. . .
}
c l a s s Song {. . .
}
Your Madonald2.java should contain at leastfive classes (three illustrated here), and youmust define each class independently. Theclasses should not nest.
Inheritance: Back to Card Game
A
A
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
1 0
10
J
J
Q
Q
K
K
A
A
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
1 0
10
J
J
Q
Q
K
K
A
A
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
1 0
10
J
J
Q
Q
K
K
A
A
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
1 0
10
J
J
Q
Q
K
K
J O K E R
JOKER
J O K E R
JOKER
©
Inheritance: Deck 1
c l a s s Deck {p r i v a t e Card [ ] c a r d s ;
pub l i c Deck ( ) {t h i s . c a r d s = new Card [ 5 2 ] ;i n t i n d e x = 0 ;f o r ( i n t s u i t = 0 ; s u i t < 4 ; s u i t++) {
f o r ( i n t rank = 1 ; rank <= 13 ; rank++) {deck [ i nd e x++] = new Card ( s u i t , rank ) ;
}}
}}
1 Cannot easily shrink (draw) or grow (discard) an array and thus the Deck
2 Here we have a deck of cards; how can we model players’ hands?
Inheritance: Deck 2: Variable-length
c l a s s Deck {p r i v a t e Ar r a yL i s t<Card> c a r d s ;
pub l i c Deck ( ) {t h i s . c a r d s = new Ar r a yL i s t<Card>() ;f o r ( i n t s u i t = 0 ; s u i t < 4 ; s u i t++) {
f o r ( i n t rank = 1 ; rank <= 13 ; rank++) {c a r d s . add (new Card ( s u i t , rank ) ) ;
}}
}}
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Inheritance: Deck 2: Variable-length
c l a s s Deck {p r i v a t e Ar r a yL i s t<Card> c a r d s ;
pub l i c Deck ( ) {t h i s . c a r d s = new Ar r a yL i s t<Card>() ;f o r ( i n t s u i t = 0 ; s u i t < 4 ; s u i t++) {
f o r ( i n t rank = 1 ; rank <= 13 ; rank++) {c a r d s . add (new Card ( s u i t , rank ) ) ;
}}
}}
ArrayList allowsus to shrink andgrow the Deck
New syntax: theArrayList class isparameterized; thisis an ArrayList
of Card s
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Inheritance: Deck 2: Variable-length
c l a s s Deck {p r i v a t e Ar r a yL i s t<Card> c a r d s ;
pub l i c Deck ( ) {t h i s . c a r d s = new Ar r a yL i s t<Card>() ;f o r ( i n t s u i t = 0 ; s u i t < 4 ; s u i t++) {
f o r ( i n t rank = 1 ; rank <= 13 ; rank++) {c a r d s . add (new Card ( s u i t , rank ) ) ;
}}
}}
An ArrayList isempty by default(an array hasa fixed length)
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Inheritance: Deck 2: Variable-length
c l a s s Deck {p r i v a t e Ar r a yL i s t<Card> c a r d s ;
pub l i c Deck ( ) {t h i s . c a r d s = new Ar r a yL i s t<Card>() ;f o r ( i n t s u i t = 0 ; s u i t < 4 ; s u i t++) {
f o r ( i n t rank = 1 ; rank <= 13 ; rank++) {c a r d s . add (new Card ( s u i t , rank ) ) ;
}}
}}
Can add anynumber of elements
to ArrayList,and can removeone with remove
https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html
Inheritance: Array vs. ArrayList
An array of Card elements
Card [ ] deck = new Card [ 5 2 ] ;
A r r a yL i s t<Card> deck = new Ar r a yL i s t<Card>() ;
An ArrayList of Card elements
It is easier to add or remove elements from an ArrayList. An array has a fixed length.
Inheritance: Deck 3: Subclass
c l a s s Ca r dCo l l e c t i o n {p r i v a t e S t r i n g l a b e l ;p r i v a t e Ar r a yL i s t<Card> c a r d s ;
pub l i c Ca r dCo l l e c t i o n ( S t r i n g l a b e l ) {t h i s . l a b e l = l a b e l ;t h i s . c a r d s = new Ar r a yL i s t<Card>() ;
}}
c l a s s Deck extends Ca r dCo l l e c t i o n {pub l i c Deck ( S t r i n g l a b e l ) {
super ( l a b e l ) ;f o r ( i n t s u i t = 0 ; s u i t < 4 ; s u i t++) {
f o r ( i n t rank = 1 ; rank <= 13 ; rank++) {c a r d s . add (new Card ( s u i t , rank ) ) ;
}}
}}
CardCollection isthe superclass of Deck
A Deck is a (extends)CardCollection;
Deck inherits all codefrom CardCollection,and Deck can be usedanywhere that expectsCardCollection
The super keywordinvokes the super-class constructor.
Inheritance: Hand
c l a s s Ca r dCo l l e c t i o n {. . .
}
c l a s s Hand extends Ca r dCo l l e c t i o n {pub l i c Hand ( S t r i n g l a b e l ) {
super ( l a b e l ) ;}
pub l i c vo id d i s p l a y ( ) [System . out . p r i n t l n ( g e tLab e l ( ) + ” : ” ) ;f o r ( i n t i = 0 ; i < s i z e ( ) ; i++) {
System . out . p r i n t l n ( getCard ( i ) ) ;}System . out . p r i n t l n ( ) ;
}}
◮ A Deck is a
CardCollection with a
constructor that creates a
standard 52-card deck
◮ A Hand is a
CardCollection that can
print its contents
Inheritance: UML
CardCollection
+label : String+card : ArrayList<Card>
+CardCollection(label:String)+addCard(c:Card)+removeCard(i:index): Card+popCard(): Card+size(): int+empty(): boolean+deal(that:CardCollection,n:int)+getCard(i:int)+last()+shuffle()
Deck
+Deck(label:String)
Hand
+Hand(label:String)+display()
Inheritance: Crazy Eights
1 Deal five or more cards to each player, and then deal one card face up to createthe “discard pile.” Place the remaining cards face down to create the “draw pile.”
2 Each player takes a turn placing a single card on the discard pile. The played cardmust match the rank or suit of the previously-played card, or it must be an eight.
3 A player that does not have a matching card or an eight must draw new cardsuntil he has a card he can play.
4 If the pile ever runs out, the discard pile is shuffled (except the top card) to createthe new draw pile.
5 As soon as a player has no cards, the game ends. All other players score penaltypoints for their remaining cards. Eights are worth 20 points, face cards are worthten points, and all others are worth their rank.
Inheritance: Assignments
Graded Homework Aquinas: macdonald2 in Java
Ungraded Labs Aquinas: vehicle2 in Java
Reading Read Chapter 14
https://www.flyn.org/courses/cs120-2021-spring/schedule