Questão de Certificação

3)	Qual é o resultado ao se tentar compilar e rodar o seguinte código mostrado abaixo ?

class Ex1
{
	public static void main (String[] args)
	{
		Ex2 ex2 = new Ex2();
	} 

	Ex1(int I)
{
} 

} 

class Ex2 extends Ex1
{
} 

a)	O código não compila porque a classe Ex1 não tem definido um construtor que não receba argumentos
b)	O código compila e roda corretamente
c)	O código não compila porque não há código de construtor para Ex1 (int i) 
d)	O código não compila porque a classe Ex2 não tem definida um construtor sem argumentos

Qual seria a resposta certa e pq?

a

pq como vc naum definiu um construtor no ex2, e ele herda de ex1, ele automaticamente tem um construtor padrão (vazio)
que vai chamar o construtor padrão de ex1 (q naum existe)

vo ser sincero, um amigo me ajudou a chegar a essa conclusão, mas muito legal sua questão… eu penso em tirar certificação e issu nos ajuda a ver como pode ser essa prova.

Valeu :wink:

na minha opinião é A

[quote=“west”]a

pq como vc naum definiu um construtor no ex2, e ele herda de ex1, ele automaticamente tem um construtor padrão (vazio)
que vai chamar o construtor padrão de ex1 (q naum existe)

vo ser sincero, um amigo me ajudou a chegar a essa conclusão, mas muito legal sua questão… eu penso em tirar certificação e issu nos ajuda a ver como pode ser essa prova.

Valeu :wink:[/quote]

A ou C

Estou em duvida entre essas duas.
Cheguei a mesma conclusão que vc, fiz alguns outros testes, criei Ex2 sem se extender a Ex1 deu certo, iniciei um construtor em Ex2 chamando o construtor Ex1(7) e funcionou então cheguei a esta conclusão, como Ex2 não foi definido um construtor java definiu 2 construtores padrões Ex1() {} e Ex2(){} gerando o Erro que Ex1(int) in Ex1 cannot applied to (). Construtor com parametro não se aplica a um sem parametro.

A! Outro dia mesmo eu testei isso… Qndo vc nao especifica nenhum construtor, o compilador insere um construtor da classe pai sem argumentos pra vc. Qndo vc define um construtor com atributos, o compilador indica q a classe tem um construtor e nao cria pra vc. Porém, qndo vc estende essa classe o compilador vai inserir um construtor pra vc na classe filha (ou uma chamada a super() caso vc defina um construtor) chamando o construtor default (sem argumento) da classe pai. Mas, como nao existe um construtor default na classe pai, vai dar erro de compilação!

Certo?!

tb vou de a!

Pra compilar teria q estar assim…

[code]class Ex1 {
public static void main (String[] args) {
Ex2 ex2 = new Ex2();
}

Ex1() {
}
}

class Ex2 extends Ex1 {
}[/code]

:razz:

vou de A
essa C ate q pode atrapalhar um pouco, mais fico com a A

:wink:

Oi gente. Estive estudando o livro da katia, sobre construtores no primeiro capitulo e tambem o livro do Deitel. O que leva que a classe Ex2 quando e extendida para a classe Ex1, ela herada o construtor de Ex1. Como no Ex1 não exite um construtor, quando se criar uma instancia da classe Ex2 para pau…
BOm eu entendi assim. Se estou errado ficarei muito feliz se alguem possa me corregir.
A resposta e a letra A

A

Em todos os construtores das classes, caso não haja super() ou this() na primeira linha, o compilador automaticamente coloca a chamada a super() - sem parâmetros.

Como não existe o construtor sem parâmetros em Ex1, erro de compilação.

só se for no português mesmo… rsssss… brincadeira
mas fico com a A também!

b) O código compila e roda corretamente
NAO COMPILA
c) O código não compila porque não há código de construtor para Ex1 (int i)
NAO COMPILA, MAS NAUM POR ESSE MOTIVO
d) O código não compila porque a classe Ex2 não tem definida um construtor sem argumentos
NAO COMPILA, MAS O COMPILADOR CRIA UM CONSTRUTOR DEFAULT SEM ARGUMENTOS PARA Ex2

bem … como só resta a letra a,
a) O código não compila porque a classe Ex1 não tem definido um construtor que não receba argumentos
OK!!! , SOH EXISTE UM CONSTRUTOR EM Ex1, E O COMPILADOR VERIFICA NAS CLASSES PAI DE Ex2, QUE NO CASO EH Ex1 E Object,E VERA QUE Ex1 NAUM POSSUE UM CONSTRUTOR SEM ARGUMENTOS, E POR ISSO ELE RECLAMA…

Somente um lembrete. Os construtores não são herdados! :wink:

[quote]Em todos os construtores das classes, caso não haja super() ou this() na primeira linha, o compilador automaticamente coloca a chamada a super() - sem parâmetros.

Como não existe o construtor sem parâmetros em Ex1, erro de compilação.[/quote]

Exatamente =) Pra arrumar o erro basta criar explicitamente um construtor sem parâmetros em Ex1 ou modificar a instanciação de Ex2 passando algum numero inteiro como parâmetro.