0% found this document useful (0 votes)
76 views

Abstract Class & Interface: Oum Saokosal, Head of IT Department

The document discusses the differences between interfaces and abstract classes in Java, noting that while interfaces are similar to abstract classes, interfaces can only contain abstract methods and constants, allow multiple inheritance, and classes implementing interfaces must override all methods, whereas abstract classes can contain non-abstract methods and only allow single inheritance.

Uploaded by

Yogesh Waran
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
76 views

Abstract Class & Interface: Oum Saokosal, Head of IT Department

The document discusses the differences between interfaces and abstract classes in Java, noting that while interfaces are similar to abstract classes, interfaces can only contain abstract methods and constants, allow multiple inheritance, and classes implementing interfaces must override all methods, whereas abstract classes can contain non-abstract methods and only allow single inheritance.

Uploaded by

Yogesh Waran
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 35

Chapter 9

Abstract Class & Interface

Oum Saokosal, Head of IT Department


National Polytechnic Institute of Cambodia
Tel: (855)-12-417214
E-mail: [email protected]

1
Interface

2
Interface
• What is interface?
• How to define interface?
• How to use interface?
• Why not use abstract class instead of interface?
• UML of interface
• Importance of interface
• Different between interface and abstract class
• Notes for interface
• Class Design Guidline
• Last words

3
What is Interface?

• In many ways, Interface is very similar to


abstract class but it marks with interface
keyword instead of abstract class
keyword.
public interface InterfaceName {
}
• Unlike abstract class which can also contain
nonabstract methods, interface contain ONLY
abstract methods and constants.

4
How to define interface?
• Defining an interface:
<modifier> interface InterfaceName{
/* Constant declarations */
/* Method signatures */
}
• E.g:
public interface Moveable{
final int MAX_MOVE = 20;
final int MIN_MOVE = 1;
public void move();
}
5
How to use interface? (1)
• Use implements keyword to implement an interface.
• E.g. Assume we have King implementing Moveable.
public interface Moveable{
final int MAX_MOVE = 20;
final int MIN_MOVE = 1;
public String howToMove();
}
public class King implements Moveable{
@Override
public String howToMove(){
return “One step to every direction”;
}
} 6
How to use interface? (2)
You can do this also:
public class Test extends JFrame implements Moveable{
public Test(){
setTitle(howToMove());
setSize(500, 200);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public String howToMove(){
return “One step to every direction”;
}
}
7
Why not use abstract class instead of
interface? (1)

Hey Rabbit! Today’s class is about


interface. The word “interface” here
means GUI, Graphical User Interface?

Not at all, Ball. GUI is GUI.


Interface here is a kind of
ideas in OOP which is similar to
abstract class. I’ll tell ya
what...

8
Why not use abstract class instead of
interface? (2)
CB: OK! Let me start my question. What is interface?
SR: Just like I said. Interface is a kind of ideas in
OOP which is similar to abstract class.
CB: Can you review what the abstract class is?
SR: Come on... You’ve learned it, haven’t you? You
should know it...!
CB: Well, but ... you know...
SR: - OK, no but. I can tell some...
- Actually, the most important thing of abstract
class is just to GUARANTEE that its closed
subclasses MUST override its abstract methods. 9
Why not use abstract class instead of
interface? (3)

CB: Why guarantee?


SR: Because of polymorphism. Do you remember the
form of polymorphism.
CR: Like this:
Vehicle v = new Jeep();
v.getGun();
SR: And what wrong if Jeep didn’t override
getGun() method?
CR: Oh I see. Then it will call getGun() from the
parent Vehicle. Because Jeep didn’t..., I see!
10
Why not use abstract class instead of
interface? (4)

SR: So how to guarantee or to force ITS CLOSED


SUBCLASSES to override every methods in
superclass?
CB: Hmmm, we make the superclass to be abstract
class and so do the methods.
SR: That’s right. The interface acts the SAME things.
CR: I see. I think if the abstract class and interface
are the same, why we need interface?
And WHY DON’T WE USE ABSTRACT CLASS
INSTEAD OF INTERFACE?
11
Why not use abstract class instead of
interface? (5)

SR: - It’s such a good question?


- You know, in some other languages like C++, a
class can inherit multiple superclasses which is
known multiple inheritance. Java, however, does not
allow multiple inheritance. That is, a class can only
have a single inheritance.
CB: So what’s wrong with the single inheritance?
SR: Well, A class can inherit only one superclass. Like:
public class Jeep extends Vehicle{
}
12
Why not use abstract class instead of
interface? (6)
CB: Yes. It is right. Vehicle must be a parent of Jeep.
SR: What about if we want to use JApplet in Vehicle
as well?
CB: Then we can do like this:
public class Jeep extends JApplet, Vehicle{
}
SR: That’s what I’m talking about! You cannot have
multiple inheritance in Java. If you still want to do
like this, you will get compile error.
And You know, you can’t do this in other languages
like ActionScript or C# as well. You cannot!!! 13
Why not use abstract class instead of
interface? (7)

CB: So...
SR: you have to make one of these two classes
(JApplet and Vehicle) to be interface.
Because you can inherit one class and implement
another class.
CB: But which one should I choose to be interface?
SR: It’s not a question!
CB: Why not?
SR: JApplet is a Java API. How can you change it to
interface? You can only change your Vehicle from
abstract class to interface. 14
Why not use abstract class instead of
interface? (8)

CB:OK. Can you change Vehicle to interface for me?


SR: Not again. You should know to do it !!!
CB: I don’t know. That’s why I ask you!
SR: OK. Here is the code of abstract class:
public abstract class Vehicle {
public abstract String getTradeMark();
public abstract double getSpeed();
public abstract boolean hasWeapon();
}
15
Why not use abstract class instead of
interface? (9)

SR: And here is the change to interface:


public interface Vehicle {
public String getTradeMark();
public double getSpeed();
public boolean hasWeapon();
}
CB: I think you didn’t mark methods with abstract
keyword!
SR: That’s OK. Mark it or not, it’s the same. It’s
always abstract automatically. 16
Why not use abstract class instead of
interface? (10)
CB: Any change with the Jeep class?
SR: Of course, but a bit. Just from extends to implements.
public class Jeep implements Vehicle {
public String getTradeMark(){
return “Jeep”;
}
public double getSpeed(){
return 250;
}
public boolean hasWeapon(){
return true;
}
} 17
Why not use abstract class instead of
interface? (11)
CB: I see. It’s great!
SR: Even greater than this, Java allow to have
MULTIPLE INTERFACE. That is, you can inherit
only one class, but you can have many interfaces.
E.g.:
public class Fish extends ChessCharacter
implements Runnable, ActionListener,
KeyListener {
/*Overridden methods are here*/
}
CB: Wow, wonderful. Now I know why we use
interface instead of abstract class. 18
Why not use abstract class instead of
interface? (12)

SR: However, You should know that in interface, you


CANNOT include nonabstract methods at all;
whereas in abstract class, you can MIX nonabstract
and abstract methods together.
CB: You mean, if we make an abstract class, then its
subclasses could reuse some nonabstract methods
without override.
SR: That’s right... and...
CB: On the other hands, if we make an interface, then
classes that implement the interface MUST
override every method.
SR: Yes.. You’re right. 19
UML of Interface (1)

• In some old books, you could see UML notation


to descript an interface like this:

Runnable Character

+ run():void + getCharacter():String
+ getRole(): String

Interface abstract class

20
UML of Interface (2)

• But in UML 2.0, to make a difference from the


abstract class and the interface notation, they
do like this:
<<interface>> Character
Runnable
+ getCharacter():String
+ run():void + getRole(): String

Interface abstract class

21
UML of Interface (3)

• And a line to indicate that a class implements


an interface is dotted line with white arrow
head.

<<interface>> Fish
Runnable

+ run():void

<<interface>>
ActionListener

+ actionPerformed(e:ActionEvent ):void

22
Importance of interface (1)
• To define an interface have to mark interface
keyword instead of class keyword.
• Interface can contain only constants and abstract
methods. Note that we DON’T need to mark method
with abstract and all the methods are public.
public interface Moveable{
//Constants
final int MAX_MOVE = 20;
final int MIN_MOVE = 1;
//abstract methods
public String howToMove();
} 23
Differences between interface and
abstract class (1)

Like abstract class,


1. if a class implement an interface, you have
to override the interface’s methods in the
class.
2. You cannot create instances from an
interface by using new operator.
3. Interface can be a type as well.
Runnable r;
4. the purpose of creating interface is because
of polymorphism. 24
Differences between interface and
abstract class (2)

Unlike abstract class,


1. You can have multiple interface in one class. To
implement those interfaces, use implements
keyword and separate interfaces by comma.
public class Test implements Runnable,
ActionListener, MouseMotionListener {
/* Overridden interfaces methods */
}

2. Interface uses interface keyword.


3. Interface is NOT designed to be superclass.
Interface is designed to add some behaviors to a
class. 25
Different between interface and
abstract class (3)

4. In the relationships, we say that:


4.1. A relationship between class/abstract class
and class is a strong relationship. It is known as
IS-A relationship.
E.g: A duck is a bird. It clearly means the duck is
really a bird. So the bird can be a superclass of a
duck. It could be either concrete or abstract class.
4.2. A relationship between class and interface is a
weak relationship. It is known as Is-kind-of
relationship.
E.g: A duck is flyable. Flyable can never ever be the
superclass of the duck. It just means this duck can
fly. So flyable is interface. 26
Notes for Interface (1)

• Because the interface is just designed to add


some behaviors or some features to classes,
usually it contains only one or two general
methods. E.g.:
public interface Runnable {
void run();
}
• The reason for this is that interface is not a
superclass. So it doesn’t specify who can use its
methods. Generally, its method might be used
by everyone.
27
Notes for Interface (2)
• By Java code conversion, the name of interface is
usually adjective. Because adjective adds some
meaning to a noun. That’s why you’ll see:
- Runnable
- Comparable
- Cloneable
- Accessible
• The interface names for event driven listener are usually
ended with Listener. E.g.
- ActionListener
- MouseMotionListener
- KeyListener 28
Class Design Guildlines p. 358-360

1. A class should descript a single entity or a single


thing.
2. Classes are usually designed for reuse by many
different customers and developers.
3. If we want polymorphism, you have to use
inheritance design (of course, overridden method).
4. If NO need polymorphism, use composite design.
5. If a relationship is strong like apple and fruit, please
use abstract class design.
6. If a relationship is weak like apple and eatable,
please use interface design.
29
Last Words (1)
CB: Hi Rabbit. After I know Class Encapsulation, Inheritance,
Polymorphism, Abstract Class and Interface, I think I know
OOP. What should I do after all?
SR: Well. First, you can learn Java of course. I mean you can
understand Java faster than ever.
CB: Oh really?
SR: Yeah... Because the difficult parts of Java is to understand
OOP. I means you have to know OOP in order to learn Java.
CB: What about people claim that they can write Java programs
but they say they don’t need to know OOP.
SR: It sounds cheating, you know! Of course, it is possible if
they really work day-in day-out with Java. But they don’t
know what is going on inside. Also, it takes so much time to be
able to write Java without understand OOP. 30
Last Words (2)
CB: I quess so but anyway. Back to my questions, which Java
topics should I learn further?
SR: You know, Java is huge. The reason for this is because Java
wants every thing work in Java.
CB: What can work in Java?
SR: You use, for example, JavaSE for Desktop Application and
Applet. JavaEE is very big and it is for big enterprise. You
can make JSP, Servlet, Web Applications, Web Services,
JavaBean, Java Server Face and many more.
CB: Wow, I’ve never heard all of these!
SR: You can also use JavaME for mobile devices, PDA, etc.
There are always a lot more to learn! Is it scary?
31
Last Words (3)
CB: Oh my... It is more enormous than I’ve ever imagined.
SR: Actually, if you really want to learn them all, you will take
your whole life to learn. But ... but... you know, after OOP, the
rest of it is only how to understand and to use Java API
library.
CB: What do you mean?
SR: I mean there’s no more strange things like what is
inheritance, polymorphism, abstract class or interface.
Because you know all of it.
CB: Yes. but API...
SR: After you knew OOP, you can use Java API. For example, to
make a button clickable, you have to use an interface called
ActionListener. And them use polymorphism to make it work.
32
Last Words (4)

CB: Heu heu...


SR: And to use JFrame, JApplet, and MIDlet, you
have to use inheritance.
CB: Oh yeah...
SR: And something like this. The key point is to
realize which way to use this API. I mean it is to
use inheritance, polymorphism or interface?
CB: OK. I got it.
SR: One more suggestion. After you know OOP, you
should learn a specific topic in Java rather learn
them all. 33
Last Words (4)
CB: How can I choose?
SR: For example, if you like to work with Web Application,
please go to Serlvet, JSP and Database Programming.
CB: What about if I like to make online game.
SR: This one? You could go to Swing, Applet, Multiple
Threading and distributed computing. But it is hard one.
CB: Any thing else?
SR: Of course. You can also learn JavaME for Mobile Phone. It
is a hot topic for today. Everybody always ask me.
CB: Really. Maybe I could make a decision now. I choose
JavaME.
SR. Yehh I choose the good one. So let go get ‘em! 34
Bye... Bye..

35

You might also like