JavaYDL15
Upcoming SlideShare
Loading in...5
×
 

JavaYDL15

on

  • 625 views

Abstract Classes and Interfaces

Abstract Classes and Interfaces

Statistics

Views

Total Views
625
Views on SlideShare
625
Embed Views
0

Actions

Likes
1
Downloads
29
Comments
0

0 Embeds 0

No embeds

Accessibility

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

JavaYDL15 JavaYDL15 Presentation Transcript

  • Chapter 15 Abstract Classes and Interfaces Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 1
  • MotivationsYou learned how to write simple programs todisplay GUI components. Can you write the codeto respond to user actions such as clicking abutton? HandleEvent Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 2
  • Objectives To design and use abstract classes (§15.2). To generalize numeric wrapper classes, BigInteger, and BigDecimal using the abstract Number class (§15.3). To process a calendar using the Calendar and GregorianCalendar classes (§15.4). To specify common behavior for objects using interfaces (§15.5). To define interfaces and define classes that implement interfaces (§15.5). To define a natural order using the Comparable interface (§15.6). To make objects cloneable using the Cloneable interface (§15.7). To explore the similarities and differences among concrete classes, abstract classes, and interfaces (§15.8). To design the Rational class for processing rational numbers (§15.9). Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 3 View slide
  • Abstract Classes and Abstract Methods GeometricObject Abstract class -color: String -filled: boolean -dateCreated: java.util.Date GeometricObjectThe # sign indicatesprotected modifie r #Geo metric Object() #Geo metric Object(color: string, filled: boolean) Circle +getColor(): St ring +setColor(colo r: String): void +isFilled(): boolean +setFilled(filled : boolean): void Rectangle +getDateCreated(): java.util.Date +toString(): String +getArea(): doubleAbstract methods +getPerimeter(): double Methods getArea and getPerimeter a re overridden inare ita lic ized Circ le and Rectangle. Superclass methods are generally omitted in the UM L d iagra m for subclasses. Circle Rectangle -radius: double -width: double TestGometricObject -height: double +Circle() +Circle (radius: double) +Rectangle() +Circle (radius: double, color: string, +Rectangle(width: double, height: double) filled: boolean) +Rectangle(width: double, height: double, +getRadius(): double color: string, filled: boolean) +setRadius(radius: double): void +getWidth(): double +getDia meter(): double +setWidth(width: double): void +getHeight(): double Run +setHeight(height: double): void Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 4 View slide
  • abstract method in abstract classAn abstract method cannot be contained in anonabstract class. If a subclass of an abstractsuperclass does not implement all the abstractmethods, the subclass must be defined abstract. Inother words, in a nonabstract subclass extended froman abstract class, all the abstract methods must beimplemented, even if they are not used in thesubclass. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 5
  • object cannot be created from abstract classAn abstract class cannot be instantiated usingthe new operator, but you can still define itsconstructors, which are invoked in theconstructors of its subclasses. For instance,the constructors of GeometricObject areinvoked in the Circle class and the Rectangleclass. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 6
  • abstract class without abstract methodA class that contains abstract methods mustbe abstract. However, it is possible to definean abstract class that contains no abstractmethods. In this case, you cannot createinstances of the class using the new operator.This class is used as a base class for defininga new subclass. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 7
  • superclass of abstract class may be concreteA subclass can be abstract even if itssuperclass is concrete. For example, theObject class is concrete, but its subclasses,such as GeometricObject, may be abstract. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 8
  • concrete method overridden to be abstractA subclass can override a method from itssuperclass to define it abstract. This is rare,but useful when the implementation of themethod in the superclass becomes invalid inthe subclass. In this case, the subclass must bedefined abstract. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 9
  • abstract class as typeYou cannot create an instance from anabstract class using the new operator, but anabstract class can be used as a data type.Therefore, the following statement, whichcreates an array whose elements are ofGeometricObject type, is correct.GeometricObject[] geo = new GeometricObject[10]; Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 10
  • Case Study: the Abstract Number Class java.lang.Number +byteValue(): byte +shortValue(): short +intValue(): int +longVlaue(): long +floatValue(): float +doubleValue():doubleDouble Float Long Integer Short Byte BigInteger BigDecimal LargestNumbers Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 11
  • The Abstract Calendar Class and Its GregorianCalendar subclass java.util.Calendar#Calendar() Constructs a default calendar.+get(field: int): int Returns the value of the given calendar field.+set(field: int, value: int): void Sets the given calendar to the specified value.+set(year: int, month: int, Sets the calendar with the specified year, month, and date. The month dayOfMonth: int): void parameter is 0-based, that is, 0 is for January.+getActualMaximum(field: int): int Returns the maximum value that the specified calendar field could have.+add(field: int, amount: int): void Adds or subtracts the specified amount of time to the given calendar field.+getTime(): java.util.Date Returns a Date object representing this calendar’s time value (million second offset from the Unix epoch).+setTime(date: java.util.Date): void Sets this calendar’s time with the given Date object. java.util.GregorianCalendar+GregorianCalendar() Constructs a GregorianCalendar for the current time.+GregorianCalendar(year: int, Constructs a GregorianCalendar for the specified year, month, and day of month: int, dayOfMonth: int) month.+GregorianCalendar(year: int, Constructs a GregorianCalendar for the specified year, month, day of month: int, dayOfMonth: int, month, hour, minute, and second. The month parameter is 0-based, that hour:int, minute: int, second: int) is, 0 is for January. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 12
  • The Abstract Calendar Class and Its GregorianCalendar subclassAn instance of java.util.Date represents a specificinstant in time with millisecond precision.java.util.Calendar is an abstract base class forextracting detailed information such as year, month,date, hour, minute and second from a Date object.Subclasses of Calendar can implement specificcalendar systems such as Gregorian calendar, LunarCalendar and Jewish calendar. Currently,java.util.GregorianCalendar for the Gregoriancalendar is supported in the Java API. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 13
  • The GregorianCalendar ClassYou can use new GregorianCalendar() to constructa default GregorianCalendar with the current timeand use new GregorianCalendar(year, month, date)to construct a GregorianCalendar with the specifiedyear, month, and date. The month parameter is 0-based, i.e., 0 is for January. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 14
  • The get Method in Calendar ClassThe get(int field) method defined in the Calendar class is useful toextract the date and time information from a Calendar object. Thefields are defined as constants, as shown in the following. Constant Description YEAR The year of the calendar. MONTH The month of the calendar with 0 for January. DATE The day of the calendar. HOUR The hour of the calendar (12-hour notation). HOUR_OF_DAY The hour of the calendar (24-hour notation). MINUTE The minute of the calendar. SECOND The second of the calendar. DAY_OF_WEEK The day number within the week with 1 for Sunday. DAY_OF_MONTH Same as DATE. DAY_OF_YEAR The day number in the year with 1 for the first day of the year. WEEK_OF_MONTH The week number within the month. WEEK_OF_YEAR The week number within the year. AM_PM Indicator for AM or PM (0 for AM and 1 for PM). Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 15
  • Getting Date/Time Information from Calendar TestCalendar Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 16
  • InterfacesWhat is an interface?Why is an interface useful?How do you define an interface?How do you use an interface? Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 17
  • What is an interface? Why is an interface useful?An interface is a classlike construct that containsonly constants and abstract methods. In manyways, an interface is similar to an abstract class,but the intent of an interface is to specify behaviorfor objects. For example, you can specify that theobjects are comparable, edible, cloneable usingappropriate interfaces. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 18
  • Define an InterfaceTo distinguish an interface from a class, Java uses thefollowing syntax to define an interface:public interface InterfaceName { constant declarations; method signatures;} Example:public interface Edible { /** Describe how to eat */ public abstract String howToEat();} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 19
  • Interface is a Special ClassAn interface is treated like a special class in Java.Each interface is compiled into a separate bytecodefile, just like a regular class. Like an abstract class,you cannot create an instance from an interfaceusing the new operator, but in most cases you canuse an interface more or less the same way you usean abstract class. For example, you can use aninterface as a data type for a variable, as the resultof casting, and so on. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 20
  • ExampleYou can now use the Edible interface to specify whether anobject is edible. This is accomplished by letting the class forthe object implement this interface using the implementskeyword. For example, the classes Chicken and Fruitimplement the Edible interface (See TestEdible). Edible TestEdible Run «interface» Animal Edible +sound(): String +howToEat(): String Fruit Chicken Tiger - - - Orange Apple - - Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 21
  • Omitting Modifiers in InterfacesAll data fields are public final static and all methods are publicabstract in an interface. For this reason, these modifiers can beomitted, as shown below: public interface T1 { public interface T1 { public static final int K = 1; Equivalent int K = 1; public abstract void p(); void p(); } } A constant defined in an interface can be accessed using syntax InterfaceName.CONSTANT_NAME (e.g., T1.K). Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 22
  • Example: The Comparable Interface// This interface is defined in// java.lang packagepackage java.lang;public interface Comparable<E> { public int compareTo(E o);} Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 23
  • Integer and BigInteger Classespublic class Integer extends Number public class BigInteger extends Number implements Comparable<Integer> { implements Comparable<BigInteger> { // class body omitted // class body omitted @Override @Override public int compareTo(Integer o) { public int compareTo(BigInteger o) { // Implementation omitted // Implementation omitted } }} } String and Date Classespublic class String extends Object public class Date extends Object implements Comparable<String> { implements Comparable<Date> { // class body omitted // class body omitted @Override @Override public int compareTo(String o) { public int compareTo(Date o) { // Implementation omitted // Implementation omitted } }} } Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 24
  • Example1 System.out.println(new Integer(3).compareTo(new Integer(5)));2 System.out.println("ABC".compareTo("ABE"));3 java.util.Date date1 = new java.util.Date(2013, 1, 1);4 java.util.Date date2 = new java.util.Date(2012, 1, 1);5 System.out.println(date1.compareTo(date2)); Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 25
  • Generic max MethodLet n be an Integer object, s be a String object, andd be a Date object. All the following expressions aretrue. n instanceof Integer s instanceof String d instanceof java.util.Date n instanceof Object s instanceof Object d instanceof Object n instanceof Comparable s instanceof Comparable d instanceof Comparable SortComparableObjects Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 26
  • Defining Classes to Implement Comparable «interface»Notation: GeometricObject java.lang.Comparable<E>The interface name and the -method names are italicized. +compareTo(o: E): intThe dashed lines and hollow Rectangletriangles are used to point to -the interface. ComparableRectangle - ComparableRectangle SortRectangles Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 27
  • The Cloneable InterfacesMarker Interface: An empty interface.A marker interface does not contain constants or methods.It is used to denote that a class possesses certain desirableproperties. A class that implements the Cloneableinterface is marked cloneable, and its objects can becloned using the clone() method defined in the Objectclass. package java.lang; public interface Cloneable { } Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 28
  • ExamplesMany classes (e.g., Date and Calendar) in the Java library implementCloneable. Thus, the instances of these classes can be cloned. Forexample, the following code Calendar calendar = new GregorianCalendar(2003, 2, 1); Calendar calendarCopy = (Calendar)calendar.clone(); System.out.println("calendar == calendarCopy is " + (calendar == calendarCopy)); System.out.println("calendar.equals(calendarCopy) is " + calendar.equals(calendarCopy));displays calendar == calendarCopy is false calendar.equals(calendarCopy) is true Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 29
  • Implementing Cloneable InterfaceTo define a custom class that implements the Cloneableinterface, the class must override the clone() method inthe Object class. The following code defines a classnamed House that implements Cloneable andComparable. House Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 30
  • Shallow vs. Deep CopyHouse house1 = new House(1, 1750.50);House house2 = (House)house1.clone(); house1: House Memory id = 1 1 area = 1750.50 1750.50 whenBuilt reference whenBuilt: Date house2 = house1.clone() date object contents house1: House Memory id = 1 1 area = 1750.50 1750.50 whenBuilt reference Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 31
  • Interfaces vs. Abstract ClassesIn an interface, the data must be constants; an abstract class canhave all types of data.Each method in an interface has only a signature withoutimplementation; an abstract class can have concrete methods. Variables Constructors Methods Abstract No restrictions Constructors are invoked by subclasses No restrictions. class through constructor chaining. An abstract class cannot be instantiated using the new operator. Interface All variables No constructors. An interface cannot be All methods must be must be public instantiated using the new operator. public abstract static final instance methods Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 32
  • Interfaces vs. Abstract Classes, cont.All classes share a single root, the Object class, but there is no single root forinterfaces. Like a class, an interface also defines a type. A variable of an interfacetype can reference any instance of the class that implements the interface. If a classextends an interface, this interface plays the same role as a superclass. You can usean interface as a data type and cast a variable of an interface type to its subclass,and vice versa. Interface1_2 Interface2_2 Interface1_1 Interface1 Interface2_1 Object Class1 Class2Suppose that c is an instance of Class2. c is also an instance of Object, Class1,Interface1, Interface1_1, Interface1_2, Interface2_1, and Interface2_2. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 33
  • Caution: conflict interfacesIn rare occasions, a class may implement two interfaceswith conflict information (e.g., two same constants withdifferent values or two methods with same signature butdifferent return type). This type of errors will be detectedby the compiler. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 34
  • Whether to use an interface or a class?Abstract classes and interfaces can both be used to model commonfeatures. How do you decide whether to use an interface or a class?In general, a strong is-a relationship that clearly describes a parent-child relationship should be modeled using classes. For example, astaff member is a person. So their relationship should be modeledusing class inheritance. A weak is-a relationship, also known as anis-kind-of relationship, indicates that an object possesses a certainproperty. A weak is-a relationship can be modeled using interfaces.For example, all strings are comparable, so the String classimplements the Comparable interface. You can also use interfaces tocircumvent single inheritance restriction if multiple inheritance isdesired. In the case of multiple inheritance, you have to design oneas a superclass, and others as interface. See Chapter 10, “Object-Oriented Modeling,” for more discussions. Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 35
  • The Rational Class java.lang.Number 1 Rational java.lang.Comparable<Rational> 1 Add, Subtract, Multiply, Divide Rational-numerator: long The numerator of this rational number.-denominator: long The denominator of this rational number. Creates a rational number with numerator 0 and denominator 1.+Rational() Creates a rational number with a specified numerator and+Rational(numerator: long, denominator. denominator: long) Returns the numerator of this rational number.+getNumerator(): long Returns the denominator of this rational number.+getDenominator(): long Returns the addition of this rational number with another.+add(secondRational: Rational): Rational Returns the subtraction of this rational number with another.+subtract(secondRational: Rational): Rational Returns the multiplication of this rational number with another.+multiply(secondRational: Rational): Rational Returns the division of this rational number with another.+divide(secondRational: Returns a string in the form “numerator / denominator.” Returns Rational): Rational the numerator if denominator is 1.+toString(): String Returns the greatest common divisor of n and d.-gcd(n: long, d: long): longRational TestRationalClass Run Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All rights reserved. 36