Será que alguém pode me explicar o que acontece nessa questão??
class Q05.java & Just.java both compile fine . What is the result of executing Q05.java ?
[code]class Just {
int a = 10 ;
Just ( ) {
call ( ) ;
}
void call ( ) {
System . out . print( "a = " + a + " ") ;
}
};
class Q05 extends Just {
int b = 16 ;
Q05 ( ) {
call ( ) ;
}
void call ( ) {
System.out.print( " b = " + b + " " ) ;
}
public static void main ( String args [ ] ) {
new Q05 ( ) ;
}
}[/code]
a) Prints a = 10 b = 16
b) Prints b = 0 b = 16
c) Prints a = 0 b = 10
d) Prints b = 0 a = 0
Não entendi…a resposta é a b
Foxlol
Setembro 18, 2006, 1:18pm
#2
Na classe Q05 existe um método chamado call, que tbm existe na superclasse Just.
Para utilizar o call da superclasse vc teria que usar super.call();
Então no exemplo, a classe Q05 chama pelo construtor o método call dela msma, porém o atributo B ainda não está setado (0), quando ela é instanciada.
E logo em seguida o médoto main cria outro objeto dela msma:
new Q05 ( ) ;
Porém desta vez b ja é igual a 16.
E o método call eh chamado exibindo b =16
Bom se eu estiver errado me corrijam
Espero ter ajudado
eltonk
Setembro 18, 2006, 1:31pm
#3
Quando chamado “new Q05 ( );” a primeira coisa que será executado é a inicialização das variáveis de instância e em seguinda o construtor da superClasse… Neste momento b = 0 (valor padrão variáries de tipos numéricos de instância não inicializados) porque a variável de instância de Q05 ainda não foi inicializada. O construtor define que deverá ser executado o método call, mas o método está sobreescrito em Q05, por isso a saída “b = 0”.
Em seguida é a vez de inicializar as variáveis de instancia de Q05 e executaro construtor da classe, e neste momento irá imprimir b = 16…
Deu para sacar?
eltonk
Setembro 18, 2006, 1:35pm
#4
Como deletar?! alguém delete esse post por favor…
eltonk
Setembro 18, 2006, 1:56pm
#5
[quote=eltonk]Outro exemplo, qual é o resultado deste deste código e porque?!
[code]
class Just {
int a = 10 ;
Just ( ) {
System . out . print( "a1 = " + a + " ") ;
call ( ) ;
}
void call ( ) {
System . out . print( "a = " + a + " ") ;
}
};
class Q05 extends Just {
int b = 16 ;
Q05 ( ) {
call ( );
}
void call ( ) {
System.out.print( " b = " + b + " " ) ;
}
public static void main ( String args [ ] ) {
new Q05 ( ) ;
}
}
[/code][/quote]