Mais uma

6 respostas
R

Qual a saída e a explicação?

package br.com.Gernerics;

public class Base {
	
	int x = 2;
	
	int method(){
		return x;
	}

	
}
package br.com.Gernerics;

public class SubClass extends Base{

	int x = 3;
	
	int method(){
		return x;
	}
	
}
public class TestBaseSub {
	
	
	public static void main(String[] args) {
	
		Base b = new SubClass();
		System.out.println(b.x);
		System.out.println(b.method());
	}
			
}

// A - Nothing. The code fails to compile because the object b is not created in a valid way.
// B - 2 and 3
// C - 2 and 2
// D - 3 and 3
// E - 3 and 2

6 Respostas

T

eu acho que é a Letra D

ViniGodoy

Supondo que a classe TestSub está no mesmo pacote, seria a letra B.

O x que será visto é o da classe Base, já que não existe sobrecarga de atributos, só de métodos.
No caso dos atributos, existe shadowing, isto é, existem na verdade 2 variáveis x, uma chamada Base.x e outra SubClass.x e como a variável b é do tipo Base, é o x de cima que será visto.

Entretanto, métodos sofrem polimorfismo. E o método invocado será, portanto, da subclasse, que vê o x do seu escopo mais interno, ou seja o de SubClass.

Se a classe TestSub não estiver no mesmo pacote, teremos um problema de restrição de escopo, o método e o atributo são package private. Isso daria uma exceção, que não está entre as respostas.

tRuNkSnEt

Letra B, Resposta do Vinny está perfeitaaaaaaaaaaa… show de bola!

renan_

Vini, sempre acompanho esses posts de certificação Java. Gostaria de agradecer por suas respostas e explicações. Ajudam muito!!

Muito Obrigado!

Att,

Renan

Deluxe

Letra B

Ah uma sombreamento de variaveis que pode confudir.

b.x -> Chama a variavel da Classe (Base): Imprimindo: 2

Base b = new SubClass(); Quando se faiz esse tipo de chamada o método a ser chamado vai ser o método subscrito
no caso o método da SubClasse. Imprimindo 3

Javabuntu

essa eu acertei, to lendo o livro da Kathy… :lol:

Criado 2 de março de 2008
Ultima resposta 2 de mar. de 2008
Respostas 6
Participantes 7