Testei agora e minha resposta está correta. Você está com alguma dúvida?
D
diogobra
E ai rod !!
rapaz , minha dúvida é a seguinte : o pre não seria impresso antes do r1 e r4 ?? eu estava imaginando que o r1 e r4 só imprimiriam quando o objeto Hawk fosse instanciado(26 linha), pois é nessa hora que os contrutores das classes pai de hawk e seus blocos inicializadores e estáticos seriam chamados.
vlw
rodrigo.bossini
Oi diogobra,
Os blocos estáticos tem comportamento diferente daqueles que não são estáticos. Eles são chamados quando a sua aplicação precisa da classe a que eles pertencem. Ou seja, quando o classloader carregar a classe na memória, a jvm já executará cada bloco estático daquela classe. Pra rodar o método main, o classloader terá que carregar a classe Hawk na memória certo? Mas perceba que Hawk extends Raptor, logo Raptor (assim como Bird, pois Raptor extends Bird) também será carregada em memória antes mesmo de o método main ser executado.
D
diogobra
vlw rod
obrigado ai pela ajuda. esclareceu bem.
W
webflex
Pessoal,
Vou aproveitar esse topico para colocar a minha duvida.
A questao é a seguinte:
interface Foo {}
class Alpha implements Foo { }
class Beta extends Alpha {}
class Delta extends Beta {
public static void main( String[] args) {
Beta x = new Beta();
// insert code here
}
Aonde está, // insert code here. Eu posso colocar.
Beta b = (Beta)(Alpha)x;
Por que isso funciona?
Nao entendi a explicacao disso.
Abs
Roberto
drigo.angelo
Roberto,
Funciona mais ou menos assim:
Um objeto do tipo Beta é um objeto do tipo Alpha, ou seja, Para cada objeto x, se x é Beta, então x é Alpha.(não se aplica no sentido contrário, um objeto Alpha pode ou não ser beta)
Então temos o objeto x, que é do tipo Beta logo, também Alpha.
E uma variável b, que é do mesmo tipo que x.
O código que você colocou é equivalente a:
Beta x = new Beta();
Alpha temp = (Alpha) x; // Ou simplesmente Alpha temp = x;
Beta b = (Beta) temp;