class Animal {
public void fazBarulho( ) {
System .
out .
println ( "silêncio" ) ; }
}
class Dog extends Animal {
public void fazBarulho( ) {
}
}
class Cat extends Animal {
public void fazBarulho( ) {
}
}
class Main {
public static void main
( String [ ] args
) { Dog dog = new Dog( ) ;
Animal animal = new Animal( ) ;
Animal animal2 = new Dog( ) ;
Animal animal3 = new Cat( ) ;
dog.fazBarulho ( ) ;
animal.fazBarulho ( ) ;
animal2.fazBarulho ( ) ; //concretamente é um cachorro
animal3.fazBarulho ( ) ; //concretamente é um gato
System .
out .
println ( "-- Castings agora --" ) ; ( ( Animal) dog) .fazBarulho ( ) ; //upcasting
( ( Dog) animal2) .fazBarulho ( ) ; //downcasting, funciona
( ( Dog) animal3) .fazBarulho ( ) ; //downcasting, dá erro porque um gato não é um cachorro
( ( Dog) animal) .fazBarulho ( ) ; //downcasting, dá erro aqui
}
}
//https://pt.stackoverflow.com/q/131091/101
Y2xhc3MgQW5pbWFsIHsgCiAgICBwdWJsaWMgdm9pZCBmYXpCYXJ1bGhvKCkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigic2lsw6puY2lvIik7CiAgICB9Cn0KY2xhc3MgRG9nIGV4dGVuZHMgQW5pbWFsIHsgCiAgICBwdWJsaWMgdm9pZCBmYXpCYXJ1bGhvKCkgewogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiYXUgYXUiKTsKICAgIH0KfQpjbGFzcyBDYXQgZXh0ZW5kcyBBbmltYWwgeyAKICAgIHB1YmxpYyB2b2lkIGZhekJhcnVsaG8oKSB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJtaWF1Iik7CiAgICB9Cn0KY2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgRG9nIGRvZyA9IG5ldyBEb2coKTsgICAgICAKICAgICAgICBBbmltYWwgYW5pbWFsID0gbmV3IEFuaW1hbCgpOwogICAgICAgIEFuaW1hbCBhbmltYWwyID0gbmV3IERvZygpOwogICAgICAgIEFuaW1hbCBhbmltYWwzID0gbmV3IENhdCgpOwogICAgICAgIGRvZy5mYXpCYXJ1bGhvKCk7CiAgICAgICAgYW5pbWFsLmZhekJhcnVsaG8oKTsKICAgICAgICBhbmltYWwyLmZhekJhcnVsaG8oKTsgLy9jb25jcmV0YW1lbnRlIMOpIHVtIGNhY2hvcnJvCiAgICAgICAgYW5pbWFsMy5mYXpCYXJ1bGhvKCk7IC8vY29uY3JldGFtZW50ZSDDqSB1bSBnYXRvCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCItLSBDYXN0aW5ncyBhZ29yYSAtLSIpOwogICAgICAgICgoQW5pbWFsKWRvZykuZmF6QmFydWxobygpOyAvL3VwY2FzdGluZwogICAgICAgICgoRG9nKWFuaW1hbDIpLmZhekJhcnVsaG8oKTsgLy9kb3duY2FzdGluZywgZnVuY2lvbmEKICAgICAgICAoKERvZylhbmltYWwzKS5mYXpCYXJ1bGhvKCk7IC8vZG93bmNhc3RpbmcsIGTDoSBlcnJvIHBvcnF1ZSB1bSBnYXRvIG7Do28gw6kgdW0gY2FjaG9ycm8KICAgICAgICAoKERvZylhbmltYWwpLmZhekJhcnVsaG8oKTsgLy9kb3duY2FzdGluZywgZMOhIGVycm8gYXF1aQogICAgfQp9CgovL2h0dHBzOi8vcHQuc3RhY2tvdmVyZmxvdy5jb20vcS8xMzEwOTEvMTAx