AA 2015-16
lezione 14 26/10/2015 14:00-15:30
Cast
public class Cast {
public static void main(String [] args){
Object o = new String("a");
String s = (String) o;
s.concat("b");
Object o2 = new Cast();
String s2 = (String) o2;//Eccezione!
s2.concat("c");
}
}
Output cast
Exception in thread "main"
java.lang.ClassCastException:
lezione13.Cast cannot be cast to
java.lang.String
at lezione13.Cast.main(Cast.java:11)
Java Result: 1
ClassCastException
Unchecked
Cast incompatibile
public static void main(String [] args)
{
Object o = new String("a");
String s = (String) o;
s.concat("b");
Cast c2 = new Cast();
String s2 = (String) c2;
s2.concat("c");
}
Cast compatibile
public static void main(String [] args){
Object o = new String("a");
String s = (String) o;
s.concat("b");
Cast c2 = new Cast();
String s2 = (String)(Object) c2;
s2.concat("c");
}
Cast
In pratica l'operatore di cast:
Esempio
public class Animale{
double peso;
String nome;
java.util.Date nascita;
String specie;//
Esempio
public class Animale{
Esempio
Esempio
Esempio
Approccio Polimorfo
OO suggerisce di organizzare il codice in un altro
modo:
Approccio Polimorfo
Esempio
Cane
public class Cane extends Animale{
@Override public Pasto preparaPasto(){
Pasto pasto = new Pasto();
if (getEta()>1)
pasto.add(new Carne(peso*0.001));
else
pasto.add(new Acqua(peso*0.003));
}
@Override public Medicina trovaCura(String malattia){
if (getEta()>3 && malattia.equals())
return new AntibioticoA(peso*0.0001);
else
}
}
Gatto
public class Gatto extends Animale{
@Override public Pasto preparaPasto(){
Pasto pasto = new Pasto();
if (getEta()>0.5)
pasto.add(new Pesce(peso*0.002);
} else if ...
}
@Override public Medicina trovaCura(String malattia){
if (getEta()>1 && malattia.equals())
return new AntibioticoC(peso*0.00005);
else
}
}
Tartaruga
Esempio
public class Animale{
double peso;
String nome;
java.util.Date nascita;
String specie;
String verso;
public Animale(String verso){
this.verso=verso;
}
public void faiVerso(){
System.out.println(verso);
}
public double getEta(){
return now()-nascita;
}
abstract
Esempio
public abstract class Animale{
double peso;
String nome;
java.util.Date nascita;
String specie;
String verso;
...
public abstract Medicina trovaCura(String m);
public abstract Pasto preparaPasto();
}
abstract
Esempio
public abstract class Animale{
double peso;
String nome;
java.util.Date nascita;
String specie;
String verso;
public Animale(String verso){
this.verso=verso;
}
public void faiVerso(){
System.out.println(verso);
}
public double getEta(){
return now()-nascita;
}
public abstract Medicina trovaCura(String m);
public abstract Pasto preparaPasto();
}
Cane
public class Cane extends Animale{
public Cane(){super("bau");}
@Override public Pasto preparaPasto(){
Pasto pasto = new Pasto();
if (getEta()>1)
pasto.add(new Carne(peso*0.001));
else
pasto.add(new Acqua(peso*0.003));
}
@Override public Medicina trovaCura(String malattia){
if (getEta()>3 && malattia.equals())
return new AntibioticoA(peso*0.0001);
else
}
}
Abstract class
Domande