Top Banner
Eredità e Polimorfismo in Java Corso di Linguaggi di Programmazione ad Oggetti 1 A.A. 2003/04 A cura di Eloisa Vargiu
51

Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

May 24, 2018

Download

Documents

duongthien
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

1

Eredità e Polimorfismo

in Java

Corso di Linguaggi diProgrammazione ad Oggetti 1

A.A. 2003/04

A cura diEloisa Vargiu

Page 2: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

2

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Definizione di Classe

l Java è un linguaggio object-oriented per cui ilcostrutto fondamentale è quello di classe:public class MyClass {

// definizione di dati membro:// slot e metodi

}

l La definizione dei dati membro (slot e metodi) va fatta dentro la definizione diclasse

Page 3: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

3

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

L’oggetto this

l Per accedere ai dati membro di una classeagendo sull’oggetto corrente di una classe siusa la parola chiave thispublic class MyClass {

private int var;public void myMethod(int var) {

this.var = var ;}

}

Page 4: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

4

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Classi e Tipi Primitivi

l Oltre al costrutto di classe, in Java sono statidefiniti 8 tipi primitivi suddivisi nelle seguenticategorie:l Logicil Numeri interil Numeri in virgola mobilel Caratteri

Page 5: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

5

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Tipi Primitivi

l Logicil boolean

l Numeri interil bytel shortl intl long

l Numeri in virgolamobilel floatl double

l Caratteril char

Page 6: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

6

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Tipi Primitivi: Esempio

public static void main(String args[]){int i = 10 ;char c ;

if (i > 0) {c = 'M' ;

}else c = 'm' ;

}

Page 7: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

7

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Tipi Primitivi e Classi Wrapper

l I tipi primitivi Java non godono delle stesseproprietà delle classe:l NON hanno slot e metodi associatil NON hanno costruttoril …

l Per poter gestire i tipi primitivi come oggetti, sono state definite e implementate apposite classi: le classi Wrapper (del package java.lang)

Page 8: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

8

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Classi Wrapper

l Esiste una classe Wrapper per ogni tipoprimitivo:l boolean → Booleanl byte → Bytel short → Shortl int → Integerl long → Long

l float → Float

l double → Double

l char → Character

Page 9: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

9

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Classi Wrapper: Esempio

l class Integerl public Integer(int value)

Integer i = new Integer(10) ;

l public int intValue()int j = i.intValue() ;

l public int compareTo(Integer anotherInteger) Integer k = new Integer(15) ;i.compareTo(k) ;

Page 10: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

10

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Classi e Interfacce

l Oltre al costrutto di classe, Java introduce ilcostrutto di Interfaccia

l Le interfacce Java (interface) contengonodefinizioni di costanti e metodi astrattil Le costanti devono necessariamente essere

inizializzatel I metodi sono tutti astratti

Page 11: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

11

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Classi e Interfacce

l Per indicare che una classe incorpora ilcomportamento di una data interfaccia si usala parola chiave implements

l Le classi possono implementare una o piùinterfacce

Page 12: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

12

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Classi e Interfacce: Esempio

public interface MyInterface {int maxDim = 100 ;boolean isFull() ;

}

public class MyClass implements MyInterface {private int dim ;public boolean isFull() {return dim = maxDim ;

}}

Page 13: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

13

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Classi e Interfacce

l Un caso particolare di interfacce sono le Marker Interfacel Tali interfacce non dichiarano al proprio interno

nessun metodo (sono vuote)l Il loro scopo è quello di “marcare” le classi che le

implementano

Page 14: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

14

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Classi e Interfacce: Esempio

l public interface Cloneablel Una classe implementa l’interfaccia Cloneable per

indicare che è possibile “clonare” tale oggetto, ovvero che si può sovrascrivere il metodo clone() della classe Object.

Page 15: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

15

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Convenzione sui Nomi

l In Java, per omogeneità verso le classistandard e verso il codice scritto da altri, è consigliabile usare la seguente convenzionesull’iniziale dei nomi e sulle parole composte:

Iniziale minuscola

Iniziale minuscolaIniziale minuscolaIniziale maiuscola

Iniziale maiuscola

anIntTipi primitivi

anObjectOggetti

aSlot – aMethod()Dati membro

MyInterfaceInterfacce

MyClassClassi

Page 16: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

16

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Nota sui Nomi delleInterfacce

l Anche se non esiste una convenzioneesplicita, solitamente i nomi delle interfacceterminano con il post-fisso able

l Tale post-fisso sta ad indicare chel’interfaccia, di fatto, definisce una proprietà

Page 17: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

17

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Costruttori

l Analogamente al C++, anche in Java esistono i costruttori

l Analogamente al C++, anche in Java i costruttori hanno lo stesso nome della classe

l Per creare una nuova istanza di un oggettobisogna obbligatoriamente invocare una new:

obj = new MyClass() ;

Page 18: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

18

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Costruttori: Esempio

public class MyClass {public MyClass() {

// costruttore senza parametri}public MyClass(Object anObject) {

// costruttore con parametri}

}

Page 19: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

19

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Distruttori

l In Java non esistono distruttoril E’ compito del Garbage Collector distruggere

gli oggetti non più referenziatil E’ possibile forzare il Garbage Collector

invocando il metodo finalize( ) della classeObject

Page 20: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

20

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Catene di eredità

l In Java tutte le classi derivano, in manieradiretta o indiretta, da una classe comune: Object

Page 21: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

21

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Catene di eredità: EsempioObject||---Number

||---Double|---Integer

||---Boolean|---Character||…

Page 22: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

22

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità singola: Classi

l In Java l’eredità è singolal Ogni classe può ereditare solamente da

un’altra classel Per indicare che una classe eredita da

un’altra classe si usa la parola chiaveextends

Page 23: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

23

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità singola: Esempio

public class Derived extends Base {// corpo della classe Derived

}

La seguente istruzione è implicita e può essereomessa:public class MyClass extends Object {// corpo della classe MyClass

}

Page 24: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

24

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità multipla: Interfacce

l Per le interfacce l’eredità è multiplal Un’interfaccia può ereditare il comportamento

di una o più interfaccel Per indicare che un’interfaccia eredita da

un’altra interfaccia si usa la parola chiaveextends

Page 25: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

25

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità Multipla: Esempio

public interface Derivable extendsIBase1, IBase2 {// definizione dell’interfaccia// Derivable

}

Page 26: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

26

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Nota sull’Eredità

l Una classe può ereditare da una solasuperclasse ma può implementare piùinterfacce così facendo Java sta in qualchemodo rendendo possibile una forma dieredità multipla.

Page 27: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

27

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità: Esempio

public class Derived extends Baseimplements IBase1, IBase2 {// implementazione della classe

}

Page 28: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

28

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità

l L’eredità in Java è sempre pubblical Non è infatti possibile, come ad esempio in

C++, stabilire metodi più sofisticati di eredità

Page 29: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

29

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

L’oggetto super

l Per accedere ai dati membro di una superclasse, siusa la parola chiave superpublic class Base {public Object obj ;…

}public class Derived extends Base{public Object obj ;public void myMethod(…) {super.obj = … ;

}…

}

Page 30: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

30

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità: Costruttori

l Nella catena di eredità vengono ereditatianche i costruttori.

l Nel caso in cui il costruttore venga ridefinitonella classe derivata, è comunque possibileaccedere al costruttore della classe madreusando il costrutto super(...) con gli eventualiparametri.

Page 31: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

31

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità: Costruttori

l La prima istruzione che viene eseguitaimplicitamente quando viene invocato un costruttore è l’istruzione super( ), ovvero ilcostruttore senza parametri della classebase.

l Il richiamo esplicito di un costruttore dellaclasse base con il costrutto super( ) (con o senza parametri) deve essere fatto come prima istruzione del costruttore.

Page 32: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

32

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità: Esempio

public class Base {public Base() { … }public Base(int var) { … }

}public class Derived extends Base {

public Derived() { super() ;…

}}

Page 33: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

33

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità: Esempio

public class Base {public Base() { … }public Base(int var) { … }

}public class Derived extends Base {

public Derived(int var) { super(var) ;…

}}

Page 34: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

34

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Modificatori di Accesso

l I dati membro possono avere uno di quattro livelli di accesso:l private l protectedl publicl default

l Va indicato nella dichiarazione della variabile o del metodo

l Se non è esplicitamente indicato si intende il livello di default

Page 35: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

35

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Modificatori di Accesso: Esempio

public class Base {private String privateSlot ;protected void protectedMethod() { ... }

}public class Derived extends Base {public void publicMethod() { this.privateSlot ; // NO!!!this.protectedMethod() ; // YES!!!

}}

Page 36: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

36

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Modificatori di Accesso: Esempiopublic class AClass {private String privateSlot ;public void publicMethod() { … }

}public class AnotherClass {public void publicMethod() { AClass obj = new AClass() ;obj.privateSlot ; // NO!!!obj.publicMethod() ; // YES!!!

}}

Page 37: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

37

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Eredità e Modificatori diAccesso

l In Java l’ereditarietà è sempre pubblical Nell’overriding dei metodi è comunque

possibile modificare il modificatore di accessol La modifica è possibile solamente nella direzione

di un aumento della visibilità.l Non è invece consentito l’occultamento del dato

Page 38: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

38

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Overriding: Esempio

public class Base {protected protectedMethod() {…}public publicMethod() {…}

}public class Derived {

public protectedMethod(){…}// YES!!!private publicMethod(){…} // NO!!!

}

Page 39: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

39

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo

ad-hoc

universal

parametric

inclusion

coercion

overloading

polymorphism

Page 40: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

40

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo Universale: per Inclusione

l Gli oggetti possono manifestare un comportamento polimorfo risalendo la catena di eredità

l Per creare il metodo più generico possibilebasterà passare come parametro un oggettodi classe Object

l Se si vuole che un metodo restituisca un oggetto il più generico possibile basteràrestituire un oggetto di classe Object

Page 41: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

41

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo per Inclusione: Esempio

public class Stack {public Object[] buffer ;public void push(Object obj) { … }public Object top() { …}…

}

Page 42: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

42

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo Universale: per Genericità

l Nella versione 1.5.0-beta sono stati introdottii Generics

l Dedicheremo un’intera lezione all’argomento(20 Maggio 2004)

Page 43: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

43

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo Ad-Hoc: Overloading

l Un metodo può essere “sovraccaricato” per manifestare diversi comportamenti

l I metodi di cui si fa l’overlaoding devonoessere distinguibili per numero e/o tipi diparametri passati in ingresso

l NON è possibile che due metodi differiscanosolamente per il tipo restituito

Page 44: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

44

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Overloading: Esempio

public class MyClass {public void myMethod()

{ … }public void myMethod(Obj obj)

{ … }public void myMethod(Obj obj, int v){ … }

}

Page 45: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

45

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo Ad-Hoc: Overloading

l Anche i costruttori possono essere“sovraccaricati”

l Per richiamare un costruttore dentro un altrocostruttore si usa il costrutto this( ) con i relativi parametri

l Questo meccanismo può ovviare allamancanza dei parametri di default

Page 46: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

46

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Overloading: Esempio

public class MyClass {public void MyClass(int a, int b)

{ … }public void MyClass () {

this(0,0) ; }

}

Page 47: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

47

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo Ad-Hoc: Overloading

l In Java non è possibile fare l’overloadingdegli operatori

l Fa eccezione la ridefinizione dell’operatore +nella classe String che permette la concatenazione di stringhe di caratteri

Page 48: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

48

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo Ad-Hoc: Coercion

l Sui tipi primitivi si ha la coercion implicita :

double y ;int x ;System.out.println(x+y) ;

>> 42.0

Page 49: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

49

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Polimorfismo Ad-Hoc: Coercion

l Per quanto riguarda gli oggetti si ha:l up-casting implicitol down-casting esplicito

Page 50: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

50

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Coercion: Esempio

l Upcasting implicito:

public class MyClass {public void push(Object o) { … }[…]

}[…]Integer anInteger = new Integer(10);MyClass mc = new MyClass() ;mc.push(anInteger) ;

Page 51: Eredità e Polimorfismo in Java - diee.unica.itarmano/LPO1/pdf/lezione040428.pdf · lIn Java l’ereditarietà è sempre pubblica lNell’overriding dei metodi è comunque possibile

51

Corso di Linguaggi di Programmazione ad Oggetti 1

Eloisa Vargiu

Coercion: Esempio

l Downcasting esplicito:public class MyClass {public void push(Integer i) { … }[…]

}[…]Object anObject = new Object();Integer anInteger = new Integer(10);anObject = anInteger ;MyClass mc = new MyClass() ;mc.push((Integer) anObject) ;