![Page 1: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/1.jpg)
Abstract Classes
29 August 2016 OSU CSE 1
![Page 2: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/2.jpg)
The Real Story?
29 August 2016 OSU CSE 2
NaturalNumber
NaturalNumber1L NaturalNumber2
implements implements
NaturalNumber-Kernel
extends
Standard
extends
Comparable
extends
![Page 3: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/3.jpg)
The Real Story?
29 August 2016 OSU CSE 3
NaturalNumber
NaturalNumber1L NaturalNumber2
implements implements
NaturalNumber-Kernel
extends
Standard
extends
Comparable
extends
Does each of NaturalNumber1L and NaturalNumber2 contain code for all 21
(yes, there are 21) methods that are introduced in, or inherited by, interface
NaturalNumber?No!
![Page 4: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/4.jpg)
The Ubiquitous Class: Object
• Every class in Java extends Object, which is a special built-in class that provides default implementations for the following instance methods (among a few others that are not so important):boolean equals(Object obj)
int hashCode()
String toString()
29 August 2016 OSU CSE 4
![Page 5: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/5.jpg)
equals
boolean equals(Object obj)
• Reports whether this is equal to obj.• Ensures:equals = (this = obj)
29 August 2016 OSU CSE 5
![Page 6: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/6.jpg)
equals
boolean equals(Object obj)
• Reports whether this is equal to obj.• Ensures:equals = (this = obj)
29 August 2016 OSU CSE 6
The default implementation in Objectchecks reference equality, though we expect object value equality! So, we (almost always)
need to override this method.
![Page 7: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/7.jpg)
hashCode
int hashCode()
• Returns an int value that is functionally determined by the value of this.
• Ensures:hashCode = [result of some fixed
integer-valued function appliedto this]
29 August 2016 OSU CSE 7
![Page 8: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/8.jpg)
hashCode
int hashCode()
• Returns an int value that is functionally determined by the value of this.
• Ensures:hashCode = [result of some fixed
integer-valued function appliedto this]
29 August 2016 OSU CSE 8
The default implementation in Objectreturns an int that depends on the reference value of this, though we
expect it to depend on the object value! So, we (almost always) need to
override this method.
![Page 9: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/9.jpg)
toString
String toString()
• Returns the string representation of this.• Ensures:toString = [the string
representation of this]
29 August 2016 OSU CSE 9
![Page 10: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/10.jpg)
toString
String toString()
• Returns the string representation of this.• Ensures:toString = [the string
representation of this]
29 August 2016 OSU CSE 10
The default implementation in Objectreturns a String that shows the reference value of this, though we expect it to show the object value! So, we (almost always)
need to override this method.
![Page 11: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/11.jpg)
Abstract Classes
• Java permits you to write a kind of “partial” or “incomplete” class that contains bodies for some but (typically) not all of the methods of the interfaces it claims to implement
• Such a class is called an abstract class:abstract class AC implements I {
...
}29 August 2016 OSU CSE 11
![Page 12: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/12.jpg)
Abstract Classes
• Java permits you to write a kind of “partial” or “incomplete” class that contains bodies for some but (typically) not all of the methods of the interfaces it claims to implement
• Such a class is called an abstract class:abstract class AC implements I {
...
}29 August 2016 OSU CSE 12
Because some methods still might not have bodies, Java will not let you instantiate an abstract class; that is, you cannot use an
abstract class like a normal class and create a new object from it.
![Page 13: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/13.jpg)
Examplepublic abstract class NaturalNumberSecondary
implements NaturalNumber {
...
}
29 August 2016 OSU CSE 13
NaturalNumber
implements
NaturalNumberSecondary
Object
extends
![Page 14: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/14.jpg)
Examplepublic abstract class NaturalNumberSecondary
implements NaturalNumber {
...
}
29 August 2016 OSU CSE 14
NaturalNumber
implements
NaturalNumberSecondary
Object
extends
This relationship is implicit: every class that does not extend some other class directly extends Object.
![Page 15: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/15.jpg)
NaturalNumberSecondary
• This abstract class has code that overrides the default implementations (inherited from Object) of equals, hashCode, and toString for NaturalNumbers, so they do “the right thing”, i.e., so their behaviors are based on object values rather than reference values– Details of this code later... see “Resources”
29 August 2016 OSU CSE 15
![Page 16: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/16.jpg)
NaturalNumberSecondary
• This abstract class also has code that implements all the methods introduced in the NaturalNumber interface, but not those inherited by it from other interfaces– Details of this code later... see “Resources”– Note that this still leaves the methods
introduced in the Standard and NaturalNumberKernel interfaces without bodies; hence, it’s an abstract class
29 August 2016 OSU CSE 16
![Page 17: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/17.jpg)
The Bigger Picture: Old Story
29 August 2016 OSU CSE 17
NaturalNumber
NaturalNumber1L NaturalNumber2
implements
NaturalNumber-Kernel
extends
implements
Standard
extends
Comparable
extends
![Page 18: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/18.jpg)
The Bigger Picture: New Story
29 August 2016 OSU CSE 18
NaturalNumber
NaturalNumber1L NaturalNumber2
extends
implements
NaturalNumber-Kernel
extends
NaturalNumberSecondary
extends
Object
extends
Standard
extends
Comparable
extends
The new abstract class
plus Object, in context…
![Page 19: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/19.jpg)
The Bigger Picture: New Story
29 August 2016 OSU CSE 19
NaturalNumber
NaturalNumber1L NaturalNumber2
extends
implements
NaturalNumber-Kernel
extends
NaturalNumberSecondary
extends
Object
extends
Standard
extends
Comparable
extends
newInstanceclear
transferFrom
constructorsmultiplyBy10divideBy10isZero
increment...root
![Page 20: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/20.jpg)
The Kernel Classes
• This leaves the kernel classes (in the example, NaturalNumber1L and NaturalNumber2) with only a few things left to implement, i.e., the 4 constructors plus the 6 methods introduced in:– Standard (i.e., newInstance, clear, and transferFrom)
– NaturalNumberKernel (i.e., multiplyBy10, divideBy10, and isZero)
29 August 2016 OSU CSE 20
![Page 21: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/21.jpg)
Layered Methods
29 August 2016 OSU CSE 21
NaturalNumber
NaturalNumber1L NaturalNumber2
extends
implements
NaturalNumber-Kernel
extends
NaturalNumberSecondary
extends
Object
extends
Standard
extends
Comparable
extends
Has layered method bodies for equals,
hashCode, and toString(overriding those methods
from Object) ...
![Page 22: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/22.jpg)
Object
extends
Layered Methods
29 August 2016 OSU CSE 22
NaturalNumber
NaturalNumber1L NaturalNumber2
extends
implements
NaturalNumber-Kernel
extends
NaturalNumberSecondary
extends
Standard
extends
Comparable
extends
... and layered method bodies for all 15 methods
introduced in NaturalNumber.
![Page 23: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/23.jpg)
Kernel Methods
29 August 2016 OSU CSE 23
NaturalNumber
NaturalNumber1L NaturalNumber2
extends
implements
NaturalNumber-Kernel
extends
NaturalNumberSecondary
extends
Object
extends
Standard
extends
Comparable
extends
Has bodies for 4 constructors plus 6
methods introduced inStandard and
NaturalNumberKernel.
![Page 24: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/24.jpg)
Kernel Methods
29 August 2016 OSU CSE 24
NaturalNumber
NaturalNumber1L NaturalNumber2
extends
implements
NaturalNumber-Kernel
extends
NaturalNumberSecondary
extends
Object
extends
Standard
extends
Comparable
extends
Has bodies for 4 constructors plus 6
methods introduced inStandard and
NaturalNumberKernel.
![Page 25: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/25.jpg)
Factoring Out Common Code
• Method bodies that can be written once—and work for any implementation of NaturalNumberKernel because they are programmed to that interface—have been factored out into an abstract class
• This leaves only constructors and a few kernel methods to be implemented in NaturalNumber1L, NaturalNumber2, and future kernel classes (if any)
29 August 2016 OSU CSE 25
![Page 26: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/26.jpg)
Factoring Out Common Code
• Method bodies that can be written once—and work for any implementation of NaturalNumberKernel because they are programmed to that interface—have been factored out into an abstract class
• This leaves only constructors and a few kernel methods to be implemented in NaturalNumber1L, NaturalNumber2, and future kernel classes (if any)
29 August 2016 OSU CSE 26
This is a best practice use for abstract classes.
![Page 27: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/27.jpg)
Another Kettle of Fish
• The code in each kernel class (e.g., in the example NaturalNumber1L and NaturalNumber2) implements only 4 constructors and 6 methods each, not all 21 methods of NaturalNumber
• But, implementing these few methods is different than implementing the other 15 layered methods where you can call the kernel methods to do the work!
29 August 2016 OSU CSE 27
![Page 28: Abstract Classes - Computer Science and Engineeringweb.cse.ohio-state.edu/.../extras/slides/03.Abstract-Classes.pdf · Abstract Classes • Java permits you to write a kind of “partial”](https://reader033.vdocument.in/reader033/viewer/2022042801/5ab8e2987f8b9ad5338d5d15/html5/thumbnails/28.jpg)
Resources
• OSU CSE Components API: NaturalNumber– http://cse.osu.edu/software/common/doc/
29 August 2016 OSU CSE 28