Download as pdf or txt
Download as pdf or txt
You are on page 1of 21

ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Ππόλογορ

Σην κάζεκα απηό παξνπζηάδνληαη ηα εμήο πνιύ βαζηθά ζέκαηα:


 Η έλλνηα ηεο θιεξνλνκηθόηεηαο
 Καλόλεο θιεξνλνκηθόηεηαο θαη ππέξβαζε κεζόδσλ
 Αιιειεπίδξαζε κεηαμύ αληηθεηκέλσλ θιάζεσλ ηεο ίδηαο ηεξαξρίαο
 Ο ηειεζηήο instanceof
 Αθεξεκέλεο (abstract) θιάζεηο θαη κέζνδνη
 Final θιάζεηο θαη κέζνδνη
 Η έλλνηα ηνπ δπλακηθνύ πνιπκνξθηζκνύ
Τν ζπγθεθξηκέλν κάζεκα απνηειεί έλα από ηα πην ζεκαληηθά καζήκαηα ηεο ΠΛΗ 24
σο ηώξα. Ο αλαγλώζηεο ζα πξέπεη λα θαηαλλνήζεη πιήξσο ηηο έλλνηεο πνπ
παξνπζηάδνληαη ζην κάζεκα απηό, έηζη ώζηε λα πξνρσξήζεη παξαθάησ.

Δθηηκώκελνο ρξόλνο νινθιήξσζεο: 3 ώξεο

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


1
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

9.1 Η έννοια ηηρ κληπονομικόηηηαρ

Η έλλνηα ηεο θιεξνλνκηθόηεηαο είλαη έλα από ηα βαζηθόηεξα ζηνηρεία ηνπ


αληηθεηκελνζηξαθνύο πξνγξακκαηηζκνύ. Σύκθσλα κε ηελ ζεώξεζε απηή, κία θιάζε,
κπνξεί λα έρεη ππό-θιάζεηο, νη νπνίεο θιεξνλνκνύλ ηα ραξαθηεξηζηηθά ηεο θαη
κπνξνύλ λα ηα ζέζνπλ εθ λένπ ή λα ζέζνπλ θαη επηπξόζζεηα δηθά ηνπο. Η Java δελ
ππνζηεξίδεη πνιιαπιή θιεξνλνκηθόηεηα. Απηό πξαθηηθά ζεκαίλεη όηη κία ππό-θιάζε
κπνξεί λα θιεξνλνκεί κία θαη κόλν θιάζε θαη όρη παξαπάλσ. Δλδηαθέξνλ
παξνπζηάδεη ην γεγνλόο όηη όιεο νη θιάζεηο νη νπνίεο δεκηνπξγνύληαη, είλαη ππό-
θιάζεηο ηεο θιάζεο Object, ε νπνία απνηειεί θαη ηελ βάζε ηεο ηεξαξρίαο ηεο Java.

Γηα λα θαηαλλνήζνπκε πεξηζζόηεξν ηελ έλλνηα ηεο θιεξνλνκηθόηεηαο, αο δνύκε έλα


παξάδεηγκα. Έζησ ινηπόλ ε παξαθάησ ηεξαξρία θιάζεσλ.

Animal

Pet WildAnimal

Dog Lion

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


2
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Απνηππώλνπκε ηα παξαπάλσ ζε Java σο εμήο:

Class Animal

package lesson_09;

public abstract class Animal {

private String eidos;


private int podia;
protected int varos;

// Constructor
public Animal(String eidos, int podia, int varos) {

this.eidos = eidos;
this.podia = podia;
this.varos = varos;

// Getters
public String getEidos() { return eidos; }
public int getPodia() { return podia; }
public int getVaros() { return varos; }

// Setters
public void setVaros(int varos) { this.varos = varos; }

// Other methods
public void makeSound() { System.out.println("Animal Sound"); }

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


3
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Class Pet

package lesson_09;

public class Pet extends Animal {

private String name;

// Constructor
public Pet(String eidos, int podia, int varos, String name) {
super(eidos,podia,varos);
this.name = name;
}

// Getters
public String getName() { return name; }

Class Dog

package lesson_09;

public class Dog extends Pet {

private int tailSize;

// Constructor
public Dog(String eidos, int podia, int varos, String name, int tailSize) {
super(eidos,podia,varos,name);
this.tailSize = tailSize;
}

// Getter

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


4
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

public int getTailSize() { return tailSize; }

// Override
public void makeSound() { System.out.println("Bark Bark"); }
}

Class WildAnimal

package lesson_09;

public class WildAnimal extends Animal {

private String location;

// Constructor
public WildAnimal(String eidos, int podia, int varos, String location) {

super(eidos,podia,varos);
this.location = location;

// Getters
public String getLocation() { return location; }

Class Lion

package lesson_09;

public class Lion extends WildAnimal {

private int fylo;

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


5
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

public static final int M = 0;


public static final int F = 1;

public Lion(String eidos, int podia, int varos, String location, int fylo) {

super(eidos,podia,varos,location);
this.fylo = fylo;

// Getters
public int getFylo() { return fylo; }

// Other methods
public void makeSound() { System.out.println("Roaaaarrrr"); }
public void eatACow(int cowWeight) { varos += cowWeight/10; }

Γηα λα κπνξέζνπκε λα εμεγήζνπκε ηελ ινγηθή ηεο παξαπάλσ ζρεδίαζεο, ζα πξέπεη


λα αλαθέξνπκε ηνπο βαζηθνύο θαλόλεο θιεξνλνκηθόηεηαο ηεο Java. Οη θαλόλεο απηνί
είλαη:
 Μία θιάζε Β θιεξνλνκεί κία θιάζε Α, αλ ζηνλ νξηζκό ηεο έρεη ηελ θξάζε
“extends Α”. Η θιάζε Α νλνκάδεηαη ππέξ-θιάζε θαη ε θιάζε Β ππό-θιάζε.
 Τα ζηνηρεία ηα νπνία θιεξνλνκνύληαη είλαη όιν ην ζώκα (κεηαβιεηέο θαη
κέζνδνη) ηεο ππέξ-θιάζεο.
 Η ππό-θιάζε κπνξεί λα έρεη πξόζβαζε ζε όπνην ζηνηρείν ηεο ππέξ-θιάζεο
έρεη δεισζεί public ή protected. Τα private ζηνηρεία ηεο ππέξ-θιάζεο δελ
κπνξνύλ λα πξνζπειαζηνύλ από ηελ ππό-θιάζε.
 Μία κέζνδνο πνπ έρεη νξηζηεί ζηελ ππέξ-θιάζε, κπνξεί λα επαλνξηζηεί (ζηελ
νπζία λα εμεηδηθεπζεί) ζηελ ππό-θιάζε. Η δηαδηθαζία απηή νλνκάδεηαη
override.
 Υπάξρνπλ πεξηπηώζεηο πνπ κία ππό-θιάζε δελ ζέιεη λα επαλνξίζεη εληειώο
ηελ κέζνδν ηεο ππέξ-θιάζεο, αιιά απιά λα ηελ επεθηείλεη. Η Java καο
παξέρεη ηελ δπλαηόηεηα απηή, κε ηελ ρξήζε ηεο εηδηθήο ιέμεο super. Γηα θάζε
ππό-θιάζε, ε ιέμε super είλαη κία αλαθνξά (reference) ζηελ ππέξ-θιάζε.
Έηζη γηα παξάδεηγκα, ζηελ θαηαζθεπάζηξηα κέζνδν public Pet(String eidos,
int podia, int varos, String name) ηεο θιάζεο Pet, ε θιεζε
super(eidos,podia,varos); θαιεί ηελ θαηαζθεπάζηξηα κέζνδν ηεο ππέξ-θιάζεο

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


6
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Animal, ζηελ νπνία έρεη νξηζηεί ήδε ε ζπγθεθξηκέλε αλάζεζε ηηκώλ. Η κόλε
δηαθνξνπνίεζε (επέθηαζε) ζηελ ππό-θιάζε Pet, είλαη ε εληνιή this.name =
name; , ε νπνία θάλεη αλάζεζε ηνπ νλόκαηνο ηνπ θαηνηθηδίνπ.
 Οη παξαπάλσ θαλόλεο εθαξκόδνληαη αλαδξνκηθά ζε έλα δέληξν ηεξαξρίαο
θιάζεσλ, γηα θάζε ζρέζε ππέξ-θιάζεο – ππό-θιάζεο κεηαμύ δύν θιάζεσλ.

Παπάδειγμα

package lesson_09;

public class Main {

public static void main(String[] args) {

// Γεκηνπξγία αληηθεηκέλσλ
WildAnimal a = new WildAnimal("Amfibio",4,2,"Europe");
Pet b = new Pet("Ptino",4,1,"Tweety");
Dog d = new Dog("Kynoeides",4,7,"Robby",1);
Lion l = new Lion("Ailouroeides",4,70,"Africa",Lion.M);

// Φξήζε κεζόδσλ
a.makeSound();
b.makeSound();
d.makeSound();
l.makeSound();

System.out.println(d.getName());
l.eatACow(100);
System.out.println(l.getVaros());

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


7
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Γηα ηελ θαηαλλόεζε ηνπ παξαπάλσ παξαδείγκαηνο, έρνπκε ηνλ παξαθάησ πίλαθα.

Ενηολή Επεξήγηζη

// Γεκηνπξγία αληηθεηκέλσλ Γεκηνπξγεί 4 αληηθείκελα, ρξεζηκνπνηώληαο


WildAnimal a = new WildAnimal("Amfibio",4,2,”Europe”); ηνπο αληίζηνηρνπο constructors.
Pet b = new Pet("Ptino",4,1,"Tweety");
Dog d = new Dog("Kynoeides",4,7,"Robby",1);
Lion l = new Lion("Ailouroeides",4,70,"Africa",Lion.M);

a.makeSound(); Καιεί ηελ κέζνδν makeSound ηεο θιάζεο


WildAnimal, ε νπνία έρεη θιεξνλνκεζεί από
ηελ θιάζε Animal. Τππώλεη “Animal Sound”.

b.makeSound(); Καιεί ηελ κέζνδν makeSound ηεο θιάζεο Pet,


ε νπνία ηελ έρεη θιεξνλνκήζεη από ηελ θιάζε
Animal, σωπίρ να ηην επανοπίζει. Τππώλεη
“Animal Sound”.

d.makeSound(); Καιεί ηελ κέζνδν makeSound ηεο θιάζεο Dog,


ε νπνία ηελ επαλνξίδεη. Τππώλεη “Bark Bark”.

l.makeSound(); Καιεί ηελ κέζνδν makeSound ηεο θιάζεο


Lion, ε νπνία ηελ επαλνξίδεη. Τππώλεη
"Roaaaarrrr".

System.out.println(d.getName()); Δπηζηξέθεη ην όλνκα ηνπ αληηθεηκέλνπ ηεο


θιάζεο Dog. Η κέζνδνο getName έρεη
θιεξνλνκεζεί από ηελ θιάζε Pet. Τππώλεη
“Robby”.

l.eatACow(100); Καιεί ηελ κέζνδν eatACow, ε νπνία είλαη


νξηζκέλε κόλν ζηελ θιάζε Lion. Πξνζζέηεη ην
έλα δέθαην ηνπ νξίζκαηνο ζην βάξνο ηνπ
ιηνληαξηνύ. Η θιάζε Lion έρεη πξόζβαζε ζηελ
κεηαβιεηή varos, επεηδή έρεη νξηζζεί ζε θάπνηα
παξαπάλσ θιάζε ζηελ ηεξαξρία σο
protected.

System.out.println(l.getVaros()); Καιεί ηελ κέζνδν getVaros, γηα ην αληηθείκελν


ηεο θιάζεο Lion. Η θιάζε Lion έρεη
θιεξνλνκήζεη ηελ κέζνδν απηή από ηελ θιάζε
WildAnimal, ε νπνία ηελ έρεη θιεξνλνκήζεη
από ηελ θιάζε Animal.

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


8
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

9.2 Η έννοια ηηρ αθηπημένηρ κλάζηρ

Η έλλνηα ηεο αθεξεκέλεο θιάζεο είλαη ε εμήο: κηα αθεξεκέλε θιάζε ρξεζηκνπνηείηαη
ΜΟΝΟ γηα λα θιεξνλνκεζεί θαη δελ κπνξνύλ λα δεκηνπξγεζνύλ αληηθείκελά ηεο. Η
δήισζε κίαο αθεξεκέλεο θιάζεο, γηα παξάδεηγκα ηεο θιάζεο Animal, απνζθνπεί
ζην εμήο: γλσξίδνπκε όηη ζην πξόγξακκά καο δελ ζα δεκηνπξγήζνπκε θαλέλα
αληηθείκελν ηεο θιάζεο απηήο θαη ζα ρξεζηκνπνηήζνπκε ηα ζηνηρεία ηεο κόλν γηα
θιεξνλνκηθόηεηα. Παξά ην γεγνλόο απηό όκσο, κπνξνύκε λα νξίζνπκε κεηαβιεηέο
(αλαθνξέο) ηεο αθεξεκέλεο θιάζεο, ρσξίο όκσο λα κπνξνύκε λα
ρξεζηκνπνηήζνπκε ηνλ ηειεζηή new γηα απηή. Φξήζε ηνπ ηειεζηή new γηα ηελ
δεκηνπξγία αληηθεηκέλνπ κηαο αθεξεκέλεο θιάζεο, δεκηνπξγεί πξόβιεκα θαηά ηελ
κεηαγιώηηηζε ηνπ πξνγξάκκαηνο.

9.3 Αλληλεπίδπαζη μεηαξύ ανηικειμένων ηηρ ίδιαρ ιεπαπσίαρ

Η Java, όπσο θαη νη πεξηζζόηεξεο γιώζζεο πξνγξακκαηηζκνύ, καο δίλεη ηελ


δπλαηόηεηα κεηαηξνπήο ελόο πξσηνγελνύ ηύπνπ ζε έλαλ άιινλ.
Η εληνιή είλαη:
a = (ηύπνο κεηαβιεηήο a) b;
Η δπλαηόηεηα απηή νλνκάδεηαη casting.
Έηζη γηα παξάδεηγκα, όηαλ έρνπκε δύν κεηαβιεηέο:

int x;
double d = 5.2;

θαη γξάςνπκε:

x = (int) d;

ε κεηαβιεηή x ζα πάξεη ηελ ηηκή 5.

Τα πξάγκαηα γίλνληαη ιίγν πεξηζζόηεξν πνιύπινθα, όηαλ νη κεηαβιεηέο είλαη


κεηαβιεηέο θιάζεσλ. Οη θαλόλεο ζε κηα ηέηνηα πεξίπησζε, είλαη νη παξαθάησ:
1. Μία αλαθνξά κπνξεί λα αλαθεξζεί ζε έλα αληηθείκελν, όηαλ ην αληηθείκελν
απηό αλήθεη ζε θιάζε ηεο ΙΓΙΑΣ ηεξαξρίαο. Γηα παξάδεηγκα κηα αλαθνξά
ηύπνπ WildAnimal κπνξεί λα αλαθεξζεί ζε αληηθείκελν ηεο ππό-θιάζεο Lion,
επεηδή βξίζθνληαη ζηελ ίδηα ηεξαξρία, αιιά όρη ζε αληηθείκελν ησλ θιάζεσλ
Pet ή Dog, επεηδή βξίζθνληαη ζε δηαθνξεηηθή ηεξαξρία.

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


9
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

2. Αλέβαζκα πξνο ηα πάλσ. Έζησ όηη έρνπκε κία αλαθνξά a ηύπνπ Α θαη κία
αλαθνξά b ηύπνπ Β. Έζησ όηη ε θιάζε Β είλαη ππό-θιάζε ηεο Α. Τόηε
κπνξνύκε λα γξάςνπκε a = b. Η κεηαβιεηή a έρεη πξόζβαζε ΜΟΝΟ ζηα
θνηλά ζηνηρεία ηεο κε ηελ κεηαβιεηή b. Ο θαλόλαο απηόο δηθαηνινγεί θαη ην όηη
θάζε αληηθείκελν ζηελ Java, κπνξεί λα αλαθεξζεί από κία αλαθνξά ηύπνπ
Object, αθνύ ζηελ ηεξαξρία θιάζεσλ, ζηελ θνξπθή βξίζθεηαη ε θιάζε Object.
3. Καηέβαζκα πξνο ηα θάησ. Τν θαηέβαζκα πξνο ηα θάησ δελ είλαη δπλαηό. Γηα
λα ζπκβεί, ζα πξέπεη ε αλαθνξά a ηεο θιάζεο Α ηνπ πξνεγνύκελνπ
παξαδείγκαηνο λα δείρλεη ήδε ζε αληηθείκελν ηεο θιάζεο Β (ή αληηθείκελν
θάπνηαο ππό-θιάζεο ηεο θιάζεο Β). Τόηε θαη κόλνλ ηόηε, κπνξνύκε λα
γξάςνπκε b = (B) a.

Γηα λα γίλνπλ πεξηζζόηεξν θαηαλλνεηά ηα παξαπάλσ, αο δνύκε έλα παξάδεηγκα.

// Η κεηαβιεηή b είλαη ηύπνπ Pet, ελώ ε d ηύπνπ Dog


// Απηό κπνξεί λα γξαθεί
b = d;
// Η κλάζη Pet πεπιέσει ηην μέθοδο makeSound, αλλά καλείηαι η μέθοδορ ηηρ Dog,
//αθού ηο ανηικείμενο ζηο οποίο αναθέπεηαι η b είναι ηύπος Dog
b.makeSound();
// Η κεηαβιεηή d, κπνξεί λα αλαθεξζεί θαη πάιη ζην αληηθείκελν πνπ δείρλεη ε κεηαβιεηή b,
//αθνύ είλαη ηύπνπ Dog
d = (Dog) b;

// Έλα αληηθείκελν κπνξεί πάληνηε λα αλαθεξζεί από κηα κεηαβιεηή ηύπνπ Object
Object o = d;
// Φπζηθά ην αληηθείκελν κπνξεί λα μαλαγίλεη αληηθείκελν ηνπ πξνεγνύκελνπ ηύπνπ
d = (Dog) o;

5.4 Η έννοια ηος interface

Όπσο είδακε θαη ζηα πξνεγνύκελα καζήκαηα, ηα αληηθείκελα ησλ θιάζεσλ


αιιειεπηδξνύλ κε ηνλ έμσ θόζκν βάζε ησλ κεζόδσλ ηνπο. Οη κέζνδνη απηνί
απνηεινύλ ην «interface» ηεο θιάζεο. Η Java καο δίλεη ηελ δπλαηόηεηα λα νξίζνπκε
κόλν ην interface κίαο θιάζεο θαη ζηελ ζπλέρεηα λα νξίζνπκε δηάθνξεο θιάζεηο πνπ
ην πινπνηνύλ. Σε αληίζεζε κε ηελ θιεξνλνκηθόηεηα, κία θιάζε κπνξεί λα πινπνηεί
πεξηζζόηεξα ηνπ ελόο interfaces. Γηα λα θαηαλλνήζνπκε πεξηζζόηεξν ηελ έλλνηα ηνπ
interface, αο δνύκε έλα παξάδεηγκα.

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


10
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Interface Bicycle

public interface Bicycle {

public void changeGear(int gear);


public void speedUp();
public void stop();
public void applyBrakes(int dec);
public int getGear();
public int getSpeed();

Class MountainBicycle

public class MountainBicycle implements Bicycle {

private int speed;


private int gear;

public void changeGear(int gear) { this.gear = gear; }


public void speedUp() { speed += 5; }
public void stop() { speed = 0; }
public void applyBrakes(int dec) { speed -= dec; }
public int getGear() { return gear; }
public int getSpeed() { return speed; }
}

Παπαηηπήζειρ
 Η ππό-θιάζε ελόο interface ζα πξέπεη λα πινπνηεί ΟΛΔΣ ηηο δεισκέλεο
κεζόδνπο ηνπ interface.
 Οη κέζνδνη ηνπ interface δελ ζα πξέπεη λα έρνπλ ζώκα.
 Γελ κπνξεί λα νξηζζεί έλα αληηθείκελν ηύπνπ interface.
 Μπνξεί λα δεισζεί κεηαβιεηή ηύπνπ interface, ε νπνία όκσο ζα αλαθέξεηαη
ζε αληηθείκελα ππό-θιάζεσλ πνπ έρνπλ δεκηνπξγεζεί.
 Μία ππό-θιάζε κπνξεί λα θιεξνλνκεί πεξηζζόηεξα ηνπ ελόο interfaces.

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


11
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

9.5 Ο ηελεζηήρ instanceof

Ο ηειεζηήο instanceof ειέγρεη εάλ έλα αληηθείκελν απνηειεί αλήθεη ζε κία θιάζε ή
όρη. Ο ηειεζηήο instanceof έρεη ηελ εμήο ζύληαμή:

αληηθείκελν instanceof όλνκα θιάζεο ή interface

Οη θαλόλεο εθαξκνγήο ηνπ ηειεζηή instanceof είλαη:


 Αλ ν έιεγρνο αθνξά θιάζεηο, ηόηε ζα πξέπεη λα αθνξά θιάζεηο ηεο ίδηαο
ηεξαξρίαο θαη κόλν. Σε δηαθνξεηηθή πεξίπησζε, ν έιεγρνο ζα νδεγήζεη ζε
ιάζνο θαηά ηελ κεηαγιώηηζε.
 Αλ ν έιεγρνο αθνξά interface, ηόηε δελ ππάξρεη ν παξαπάλσ πεξηνξηζκόο
ηεξαξρίαο.
 Τν αληηθείκελν κίαο θιάζεο απνηειεί θαη αληηθείκελν όισλ ησλ ππέξ-θιάζεώλ
ηεο, αθόκα θαη αλ νη ππέξ-θιάζεηο έρνπλ δεισζεί σο abstract ή σο interface.

Παπάδειγμα 1
¨Δζησ ηα αληηθείκελα

WildAnimal a = new WildAnimal("Amfibio",4,2,”Europe”);


Pet b = new Pet("Ptino",4,1,"Tweety");
Dog d = new Dog("Kynoeides",4,7,"Robby",1);
Lion l = new Lion("Ailouroeides",4,70,"Africa",Lion.M);

ηνπ παξαπάλσ παξαδείγκαηνο.


Τόηε:

b instanceof Pet true

b instanceof Animal true

b instanceof Dog false

b instanceof WildAnimal ζπληαθηηθό ιάζνο (νη θιάζεηο Pet, ηεο


νπνίαο αληηθείκελν είλαη ην b θαη
WildAnimal, δελ αλήθνπλ ζηελ ίδηα
ηεξαξρία).

d instanceof Bicycle false (επεηδή ην Bicycle είλαη interface, ν


έιεγρνο απηόο δελ νδεγεί ζε ζπληαθηηθό
ιάζνο)

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


12
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

l instanceof Object true (όιεο νη θιάζεηο ζηελ Java


θιεξνλνκνύλ ηελ θιάζε Object)

Παπάδειγμα
ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΕΑΠ 2007/2008 – ΘΕΜΑ 4, Ερώτημα 2

Έζησ ην παξαθάησ δηάγξακκα θιάζεσλ:

Καη ν θώδηθαο
class InstanceofDemo {
public static void main(String[] args) {
Parent obj1 = new Parent();
Parent obj2 = new Child();
System.out.println("obj1 instanceof Parent: " +
(obj1 instanceof Parent));
System.out.println("obj1 instanceof Child: " +
(obj1 instanceof Child));
System.out.println("obj1 instanceof MyInterface: " +
(obj1 instanceof MyInterface));
System.out.println("obj2 instanceof Parent: " +
(obj2 instanceof Parent));
System.out.println("obj2 instanceof Child: " +
(obj2 instanceof Child));
System.out.println("obj2 instanceof MyInterface: " +
(obj2 instanceof MyInterface));
}

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


13
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Πνην ζα είλαη ην απνηέιεζκα ηνπ θώδηθα;


Υπόδεημε: Η ιέμε θιεηδί instanceof ειέγρεη αλ έλα αληηθείκελν είλαη θάπνηνπ ηύπνπ θαη
επηζηξέθεη true ή false.

Λύζη

obj1 instance of Parent: true


obj1 instance of Child: false
obj1 instance of MyInterface: false
obj2 instance of Parent: true
obj2 instance of Child: true
obj2 instance of MyInterface: true

9.6 Επιππόζθεηερ πληποθοπίερ

9.6.1 Η έννοια ηηρ final μεηαβληηήρ


Η έλλνηα ηεο final κεηαβιεηήο ζηελ Java είλαη απηή ηεο ζηαζεξάο, πνπ ηζρύεη θαη ζηηο
ππόινηπεο γιώζζεο πξνγξακκαηηζκνύ. Αλ κία κεηαβιεηή νξηζηεί σο final, απηό
πξαθηηθά ζεκαίλεη όηη κπνξεί λα ηεο εθρσξεζεί ηηκή κόλν κία θνξά θαη ζπλεπώο ε
ηηκή απηή δελ κπνξεί λα κεηαβιεζεί. Σπλεζίδνπκε λα δίλνπκε ηελ ηηκή κηαο final
κεηαβιεηήο θαηά ηελ δήισζή ηεο.

9.6.2 Η έννοια ηηρ final κλάζηρ


Αλ κία θιάζε δεισζεί σο final, έρεη ηελ εμήο έλλνηα: δελ κπνξεί λα θιεξνλνκεζεί
από θάπνηα άιιε θιάζε. Σηελ νπζία ιεηηνπξγεί σο κία δηθιείδα αζθαιείαο, αλ ν
θαηαζθεπαζηήο ηεο θιάζεο δελ ζέιεη λα θιεξνλνκεζνύλ νη ηδηόηεηέο ηεο. Γηα
παξάδεηγκα. Η θιάζε java.lang.System έρεη δεισζεί σο final.

9.6.3 Η έννοια ηηρ final μεθόδος


Αλ κία κέζνδνο δεισζεί σο final, έρεη ηελ εμήο έλλνηα: δελ κπνξεί λα γίλεη override
από κία ππό-θιάζε. Η δπλαηόηεηα απηή ζα κπνξνύζε λα ρξεζηκνπνηεζεί ζηελ
πεξίπησζε όπνπ ε ιεηηνπξγία κίαο κεζόδνπ είλαη εμαηξεηηθά ζεκαληηθή γηα ηελ
ιεηηνπξγία κηαο θιάζεο θαη ησλ ππό-θιαζεώλ ηεο θαη δελ ζα πξέπεη λα αιιάμεη.

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


14
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

9.6.4 Η έννοια ηηρ abstract μεθόδος


Μία κέζνδνο κπνξεί λα δεισζεί σο abstract (αθεξεκέλε), ΜΟΝΟ κέζα ζην ζώκα
κίαο abstract (αθεξεκέλεο) θιάζεο. Μία abstract κέζνδνο δελ ζα πξέπεη λα έρεη
ζώκα. Η ππό-θιάζε ηεο abstract κεζόδνπ, ζα πξέπεη νπσζδήπνηε λα νξίδεη ηελ
ζπγθεθξηκέλε κέζνδν, εθηόο από ηελ πεξίπησζε, όπνπ ε ππό-θιάζε ζα δεισζεί θη
απηή σο abstract. Έλα παξάδεηγκα παξνπζηάδεηαη παξαθάησ.

public abstract class TestClass {


public abstract void testMethod();
}

9.7 Ένα ζςνδςαζμένο παπάδειγμα

Γεκηνπξγείζηε έλα θαηάζηεκα δηαζθέδαζεο, ην νπνίν πεξηέρεη δύν είδε παηρληδηώλ:


ειεθηξνληθά παηρλίδηα (ηνπ παηρληδηνύ Tetris) θαη κπηιηάξδα. Γηα λα παίμεη θάπνηνο
έλα παηρλίδη, ζα πξέπεη λα πιεξώζεη κία ηηκή. Η ηηκή είλαη 7 επξώ γηα ηα ειεθηξνληθά
παηρλίδηα θαη 15 επξώ γηα ηα κπηιηάξδα. Τν θαηάζηεκα πεξηέρεη 40 ζπλνιηθά
παηρλίδηα (ειεθηξνληθά παηρλίδηα θαη κπηιηάξδα), ηα νπνία είλαη αξηζκεκέλα κε
αξηζκνύο από ην 0 έσο ην 39. Όηαλ θάπνηνο ζέιεη λα παίμεη έλα παηρλίδη, ηόηε ζα
πξέπεη λα δειώζεη ηνλ θσδηθό ηνπ παηρληδηνύ πνπ επηζπκεί λα παίμεη θαη λα δώζεη
έλα πνζό.
1. Πξαγκαηνπνηείηαη έιεγρνο γηα ην αλ ην πνζό ην νπνίν δηέζεζε επαξθεί γηα ην
ζπγθεθξηκέλν παηρλίδη.
2. Αλ όρη, ηόηε εθηππώλεηαη ην κήλπκα “Not enough cash!”.
3. Αλ λαη, ηόηε επηζηξέθνληαη ηα ξέζηα ζηνλ πειάηε θαη:
 αλ ην παηρλίδη είλαη έλα ειεθηξνληθό παηρλίδη, ηόηε εθηππώλεηαη ην κήλπκα
“Let’s play TETRIS!”.
 αλ όρη, ηόηε εθηππώλεηαη ην κήλπκα “Let’s play BILLIARD!”
Να θαηαζθεπάζεηε πξόγξακκα ζε Java πνπ:
1. Μνληεινπνηεί ηελ παξαπάλσ ζπκπεξηθνξά ζε θιάζεηο.
2. Γεκηνπξγεί 40 ηπραία παηρλίδηα, θάπνηα ειεθηξνληθά θαη θάπνηα κπηιηάξδα.
3. Μεηξάεη θαη εθηππώλεη πόζα κπηιηάξδα δεκηνπξγήζεθαλ θαη πόζα ειεθηξνληθά
παηρλίδηα.
4. Βάδεη δύν πειάηεο λα παίμνπλ ζηα παηρλίδηα κε θσδηθνύο 15 θαη 20, δηαζέηνληαο
ρξήκαηα 10 θαη 20 επξώ αληίζηνηρα.

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


15
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Λύζη

Class Game

public abstract class Game {

private int price;

public Game(int price) {

this.price = price;

public int getPrice() { return price; }


public boolean playGame(int cash) {

if (cash < price) {


System.out.println("Not enough cash!");
return false;
} else {
int change = cash - price;
System.out.println("Resta: " + change);
return true;
}

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


16
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Class Tetris

public class Tetris extends Game {

public Tetris() {
super(7);
}

public boolean playGame(int cash) {

if (super.playGame(cash) == false) {
return false;
} else {
System.out.println("Let’s play TETRIS!");
return true;
}

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


17
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Class Billiard

public class Billiard extends Game {

public Billiard() {
super(15);
}

public boolean playGame(int cash) {

if (super.playGame(cash) == false) {
return false;
} else {
System.out.println("Let’s play BILLIARD!");
return true;
}

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


18
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Class Shop

import java.util.Random;

public class Shop {

private Game[] games;

public Shop() {

Random r = new Random();

games = new Game[40];


for (int i = 0; i < games.length; i++) {
if ((r.nextInt() % 2) == 0) {
games[i] = new Tetris();
} else {
games[i] = new Billiard();
}
}

public int getTetrisNum() {

int count = 0;
for (int i = 0; i < games.length; i++) {
if (games[i] instanceof Tetris)
count++;
}

return count;

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


19
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

public int getBilliardsNum() {

int count = 0;
for (int i = 0; i < games.length; i++) {
if (games[i] instanceof Billiard)
count++;
}

return count;

public boolean playGame(int index, int cash) {

if (index < 0 || index > 40)


return false;

games[index].playGame(cash);
return true;

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


20
ΠΛΗ 24 – Μάθημα 09 –Κληρονομικότητα

Class Main

public class Main {

public static void main(String[] args) {

Shop shop = new Shop();

System.out.println("Tetris Games Number: " + shop.getTetrisNum());


System.out.println("Billiard Games Number: " + shop.getBilliardsNum());

shop.playGame(15, 10);
shop.playGame(20, 20);

Η θαηαλλόεζε ηνπ παξαπάλσ παξαδείγκαηνο απνηειεί έλα κεγάιν βήκα ζηελ


θαηαλλόεζε ηεο θηινζνθίαο ηνπ δπλακηθνύ πνιπκνξθηζκνύ θαη γεληθόηεξα ηεο Java.
(Η ύιε ε νπνία απαηηείηαη βξίζθεηαη ζην ζπγθεθξηκέλν κάζεκα.)

ΣΟΛΩΜΟΥ 29 ΑΘΗΝΑ  210.38.22.157 – 495 Fax: 210.33.06.463


θξνληηζηεξηαθά καζήκαηα γηα : Δ.Μ.Π. – Α.Δ.Ι. – Α.Τ.Δ.Ι. – Δ.Α.Π.

• www.arnos.gr … θιηθ ζηε γλώζε • info@arnos.co.gr


21

You might also like