Download presentation
Presentation is loading. Please wait.
Published byPrudence Norris Modified over 9 years ago
1
Chapter 14 Abstract Classes and Interfaces
2
Abstract Classes An abstract class extracts common features and functionality of a family of objects An abstract class provides a uniform interface for dealing with a family of objects Abstract classes are defined with the abstract keyword
3
Using abstract classes Concrete instances of abstract classes cannot be instantiated with the new operator However, variables of abstract class types can be declared and used to hold objects that extend (inherit from) the abstract class Abstract classes can have constructors that are called by subtypes using the super keyword (even though they cannot be created)
4
Abstract Methods Methods can be defined using the abstract keyword If a class contains abstract methods, the class must be declared abstract as well Abstract methods do not have a body Abstract methods are implemented by subclasses If a subclass does not implement all abstract methods in the superclass, it must be declared abstract
5
What is the purpose? Abstract methods define a common interface that all subclasses will implement The methods can be called on a supertype variable using polymorphism without regard to what actual subtype is stored in the variable. Allows generic treatment of a family of subtypes
6
Other points of interest An abstract class does not have to define any abstract methods A subclass can be defined abstract even if the superclass is concrete (e.g. java.lang.Object) A subclass can override a superclass method and define it to be abstract
7
Interfaces Interfaces are like abstract classes—but Interfaces are declared with the interface keyword Interfaces can only define abstract methods Interfaces can only declare constants Interfaces are compiled into separate byte- code files just like classes
8
How to use interfaces A class can extend only one class by inheritance (using the extends keyword) A class can implement an unlimited number of interfaces (using the implements keyword) An interface is “contract” of functionality Classes can be designed to use and provide specific functionality via an defined interface (the Application Programming Interface)
9
Java and Multiple Inheritance Java does not support inheriting from multiple classes (linear inheritance model) This avoids many problems encountered in C++ Java can simulate multiple inheritance by having a class implement multiple interfaces that provide the functionality of multiple “class abstractions”
10
The Comparable interface public interface Comparable { public int compareTo(Object o); } Classes implementing this interface can be compared to each other to obtain an ordering relationship public class MyClass extends Object implements Comparable { public int compareTo(Object o) { // code to compare objects } }
11
An informative example
12
A Caveat compareTo() returns zero if two objects have the same ordering relationship Generally, this would imply that the overriden equals() method inherited from java.lang.Object would also return true for the two objects Often the implementations will be congruent, but not always
13
ActionListener ActionListener is an interface for handling GUI events such as button clicks A class that implements ActionListener overrides the actionPerformed() method to provide custom processing to respond to GUI events A GUI element “adds” an object implementing ActionListener and then sends events (e.g. button clicks) to the object for processing through the actionPerformed() method
17
How does ActionListener work? Explain how ActionListener works under the covers if students do not appear too restless or bored Is event handling in Java kind of like a “come from” statement (opposite of goto)? ActionListeners are often implemented as anonymous inner classes--but that is a topic for next semester!
18
The Cloneable Interface Cloneable is an empty interface (no methods or constants defined) Empty interfaces are called marker interfaces and signal that an object implements certain characteristics In this case, Cloneable indicates that the class overrides the clone() method defined for java.lang.Object
19
clone() The definition of clone() is: protected native Object clone() throws CloneNotSupportedException; Cloning relies on the underlying system to create a copy of an object—native code clone() is a protected method, but it can be made public when overriden clone() can throw an exception that you should handle
20
Shallow Copy The overriden method clone() can be implemented by calling super.clone() Implementing it this way does a shallow copy A shallow copy will copy the contents of each field of the object to the new object The value of primitive types are copied The references to objects are copied References will be equal even though the cloned objects are not equal
21
Deep Copy A deep copy creates duplicates of the objects referenced by fields rather than simply copying the references Deep copy is implemented by first calling super.clone() and then adding code to duplicate objects Deep copy is important if the two objects modify internal objects and should not be using the same objects
22
Multithreading Multithreading means running two different paths of execution simultaneously Java has two ways to do multithreading: the good way and the other way The good way is to implement the Runnable interface The other way is to extend the Thread class (if you need to override its methods)
23
Runnable The Runnable interface has just one method: void run(); // no parameters The run() method is where thread execution starts, which is effectively the main method for the thread A class that implements Runnable can create a Thread with itself as the parameter and run itself in a thread
24
An example of multithreading
26
Setting up and calling threads
27
Results of running multiple threads
28
Interface vs. Abstract Class Interface All variables must be public static final Constructors are not allowed All methods must be public abstract Abstract Class No restrictions on variables Constructors are allowed and can be invoked by subclasses No restrictions on methods
29
When to use An abstract class represents common functionality extracted from a family of related objects An interface represents common functionality that can be implemented by unrelated objects What are some examples typifying this division of usage?
30
Primitive Data Types as Objects All primitive data types can be represented as objects Doing this would make the language perfectly uniform It would also make the language very slow Wrapper Classes are the objects that “wrap” primitive data types Wrapper classes allow generic programming
31
Wrapper Classes Boolean Character Byte Short Integer Long Float Double
32
Number The numeric wrapper classes extend the abstract Number class Number has methods to convert a value to various primitive types Each wrapper class overrides the toString(), equals() and compareTo() methods Each wrapper class knows the MAX_VALUE and MIN_VALUE for the types it wraps
33
Conversion methods shortValue() intValue() longValue() floatValue() doubleValue() valueOf(String strValue) // returns an object initialized with the value specified in strValue
34
Parsing methods public static xyz parseXyz(String s) public static xyz parseXyz(String s, int radix) Static methods called on wrapper class Integer.parseInt(“536”, 16); Returns the primitive type (xyz) represented by the string Can choose a radix value of 2, 8, 10, or 16 (the default is 10)*
35
BigInteger and BigDecimal Java provides two classes for handling very large or very precise numbers BigInteger and BigDecimal can represent numbers of any size or precision* Both classes implement add(), subtract(), multiply(), divide(), and remainder() Both implement compareTo() Be careful with BigDecimal.divide()*
36
Example using big numbers
37
CS4a Lab 1 redux Calculating Pi using BigDecimal
38
Problems to consider Will this require doing arithmetic with more digits of precision that just 20? What kinds of cumulative errors have we discussed in class that need to be avoided? How many digits of calculation precision will be required to accurately define 20 digits of pi? How many terms need to be expanded?
39
Details Remember to have a cover sheet and include appropriate comments and printouts of the results. Assignment due: 4:30 p.m. November 1, 2012
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.