Questão OO

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

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

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?

Como deletar?! alguém delete esse post por favor… :slight_smile:

[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]