You are on page 1of 5

abstract method in abstract class

Chapter 11 Abstract Classes and Interfaces

If a class contains abstract methods, it must be declared abstract


An abstract method cannot be contained in a nonabstract class

If a subclass of an abstract superclass does not implement all the abstract methods, the subclass must be declared abstract
In other words, in a nonabstract subclass extended from an abstract class, all the abstract methods must be implemented, even if they are not used in the subclass

Superclasses and Subclasses


GeometricObject1.java Circle4.java Rectangle1.java

Instance cannot be created from abstract class


An abstract class cannot be instantiated using the new operator You can still define its constructors, which are invoked in the constructors of its subclasses For instance, the constructors of GeometricObject are invoked in the Circle class and the Rectangle class.

Abstract Classes and Abstract Methods


GeometricObject
-color: String -filled: boolean The # sign indicates protected modifer -dateC reated: java. util.Date #GeometricObject() +getC olor(): String +setColor(color: String): void +isFi lled (): boolean +setFilled(fi lled: boolean): void +getDateC reated(): java.util.Date +toString(): String Abstract m ethods +getArea(): double +getPerimeter(): double Met hods getArea an d getPerimeter are overridden in Circle and Rectangle. Overrid den methods are generally om itted in the UML d iagram for subclasses. Abstract class

abstract class without abstract method


A class that contains abstract methods must be abstract It is possible to declare an abstract class that contains no abstract methods In this case, you cannot create instances of the class using the new operator - this class can be used as a base class for defining a new subclass

GeometricObject.java Circle.java Rectangle.java

Circle
-radiu s: double +Circle() +Circle(radius: double) +getRadius(): doubl e +setRadius(radius: d ouble): void +getDiam eter(): double -width: double -height: double +Rectangle()

Rectangle

+Rectangle(width: double, heigh t: double) +getWid th(): double +setWi dth(wid th: double): void +getHeight (): double +setHeight(height: doub le): void

superclass of abstract class may be concrete


A subclass can be abstract even if its superclass is concrete For example, the Object class is concrete, but its subclasses, such as GeometricObject, may be abstract

Review questions
Which of the following declares an abstract method in an abstract Java class?

A. public abstract method(); B. public abstract void method(); C. public void abstract Method(); D. public void method() {} E. public abstract void method() {}

10

concrete method overridden to be abstract


A subclass can override a method from its superclass to declare it abstract This is rare, but useful when the implementation of the method in the superclass becomes invalid in the subclass In this case, the subclass must be declared abstract

Review questions
Which of the following statements regarding abstract methods are true?
A.

B. C. D.

E.

An abstract class can have instances created using the constructor of the abstract class. An abstract class can be extended. A subclass of a non-abstract superclass can be abstract. A subclass can override a concrete method in a superclass to declare it abstract. An abstract class can be used as a data type.

11

abstract class as type


You cannot create an instance from an abstract class using the new operator, but an abstract class can be used as a data type

Review questions
Suppose A is an abstract class, B is a concrete subclass of A, and both A and B have a default constructor. Which of the following is correct?

GeometricObject obj = new Circle(10); GeometricObject[] geo = new GeometricObject[10];

A. A a = new A(); B. A a = new B(); C. B b = new A(); D. B b = new B();

12

Interfaces
What is an interface? Why is an interface useful? How do you define an interface? How do you use an interface?

Define an Interface
public interface InterfaceName { constant declarations; method signatures; }
public interface Edible { /** Describe how to eat */ public abstract String howToEat(); }
Edible.java TestEdible.java

13

16

What is an interface? Why is an interface useful?


An interface is a classlike construct that contains only constants and abstract methods In many ways, an interface is similar to an abstract class, but the intent of an interface is to specify behavior for objects
For example, we can specify that the objects are comparable, edible, cloneable using appropriate interfaces such as Comparable, Edible, and Cloneable

Omitting Modifiers in Interfaces


All data fields are public final static (constants) in an interface All methods are public abstract in an interface

public interface T1 { public static final int K = 1; public abstract void p(); }

Equivalent

public interface T1 { int K = 1; void p(); }

A class that implements an interface need to implement all the abstract methods
For example, we can define Orange and Chicken classes that implement Edible interface
14 17

Interface is a Special Class


Like an abstract class, you cannot create an instance from an interface using the new operator You can create an instance from a class that implements an interface You can use an interface as a data type for a variable, as the result of casting, and so on.

The Comparable Interface


// This interface is defined in // java.lang package
package java.lang; public interface Comparable { public int compareTo(Object o); }

15

18

String and Date Classes


Many classes (e.g., String and Date) in the Java library implement Comparable to define a natural order for the objects
public class String extends Object implements Comparable { // class body omitted } public class Date extends Object implements Comparable { // class body omitted }

Review questions
Which of the following is a correct interface?
A. interface A { void print() { }; } B. abstract interface A { print(); } C. abstract interface A { abstract void print() { };} D. interface A { void print();}

19

22

Declaring Classes to Implement Comparable


otation: The interface name and the method names are italicized. The dashed lines and hollow triangles are used to point to the interface. GeometricObject Rectangle ComparableRectangle interface

Using Interface for Event Programming


Event programming

java.lang.Comparable +compareTo(o: Object): int

the flow of the program is determined by user actions (mouse clicks, key presses) or messages from other programs. Components
Event sources: user interface components or other sources that generate the events

ComparableRectangle rectangle1 = new ComparableRectangle(4, 5); ComparableRectangle rectangle2 = new ComparableRectangle(3, 6); System.out.println(Max.max(rectangle1, rectangle2));

Events: user actions or other events Event listener: reactions on events Basic steps Define event listener - implements an interface called ActionListener which contains a method actionPerformed() for processing the event Register event listener with event sources

Card class implements Comparable!


20

Generic max Method


Lets write a generic method that sorts an array of comparable objects GenericSort.java

GUI buttons
Lets see how we can use GUI buttons! Its all about the interfaces

HandleEvent.java

21

24

Interfaces vs. Abstract Classes


In an interface, the data must be constants; an abstract class can have all types of data. Each method in an interface has only a signature without implementation; an abstract class can have concrete methods.
Variables Constructors Methods

Practice questions
Abstract classes
11.1, 11.4

Interface
11.4, 11.7

Abstract class

No restrictions

Constructors are invoked by subclasses through constructor chaining. An abstract class cannot be instantiated using the new operator. No constructors. An interface cannot be instantiated using the new operator.

No restrictions.

Interface

All variables must be public static final

All methods must be public abstract instance methods

25

Interfaces vs. Abstract Classes, cont.


All classes share a single root, the Object class, but there is no single root for interfaces

Interface1_2

Interface2_2

Interface1_1

Interface1

Interface2_1

Object

Class1

Class2

26

Caution: conflicting interfaces


A class may implement two interfaces with conflict information (e.g., two same constants with different values or two methods with same signature but different return type) This type of errors will be detected by the compiler.

27

You might also like