Qual o erro presente nesta classe?

5 respostas
diegofss11
Gostaria de saber o porque do erro na linha 6

Interface A{}

Interface B{void b();}

Interface C {public void c();}

abstract class D implements A, B, C {}

class E extends D {

void b (){}  // POR QUE DA ERRO AQUI ?

public void c() {}

}
Essa é uma questao da prova de SCJA

Gostaria de explicações… por favor :smiley:

Obrigado!

5 Respostas

Vini_Fernandes

Cara, por padrao os metodo de uma interface sao definidos com public abstarct e veja que quando voce implementa uma interface voce deve explicitamente definir a visibilidade do metodo, assim:

class E extends D {
public void b (){} 
public void c() {}

}

Todas as vezes q voce sobreescreve um metodo public voce nao pode reduzi a visivilidade dele para protected ou mesmo default.
T+

LPJava

so para completar o que o vini falou, da forma que deixou na linha 6 (que nao vi o nro da linha) o modificador padrao é default e nao public, alguns acham que sim, mas so é public como padrao em interfaces, mas em classes nao.

flw!

diegofss11

Vini Fernandes:
Cara, por padrao os metodo de uma interface sao definidos com public abstarct e veja que quando voce implementa uma interface voce deve explicitamente definir a visibilidade do metodo, assim:

class E extends D {
public void b (){} 
public void c() {}

}

Todas as vezes q voce sobreescreve um metodo public voce nao pode reduzi a visivilidade dele para protected ou mesmo default.
T+

Mas default nao e a msm coisa que public nao ?

Eu tambem estou herdando do jeito que foi declarado em Interface B … sem o"public"

LPJava

diegofss11:
Vini Fernandes:
Cara, por padrao os metodo de uma interface sao definidos com public abstarct e veja que quando voce implementa uma interface voce deve explicitamente definir a visibilidade do metodo, assim:

class E extends D {
public void b (){} 
public void c() {}

}

Todas as vezes q voce sobreescreve um metodo public voce nao pode reduzi a visivilidade dele para protected ou mesmo default.
T+

Mas default nao e a msm coisa que public nao ?

nao. default está restrito a um package, ou seja, somente as classes daquele package e o public como o proprio nome ja diz, todo mundo tem acesso. Pense nisso como as leis. uma lei municipal é default para uma especifica cidade, mas as leis federais são public. :D.
flw!

diegofss11

LPJava:
diegofss11:
Vini Fernandes:
Cara, por padrao os metodo de uma interface sao definidos com public abstarct e veja que quando voce implementa uma interface voce deve explicitamente definir a visibilidade do metodo, assim:

class E extends D {
public void b (){} 
public void c() {}

}

Todas as vezes q voce sobreescreve um metodo public voce nao pode reduzi a visivilidade dele para protected ou mesmo default.
T+

Mas default nao e a msm coisa que public nao ?

nao. default está restrito a um package, ou seja, somente as classes daquele package e o public como o proprio nome ja diz, todo mundo tem acesso. Pense nisso como as leis. uma lei municipal é default para uma especifica cidade, mas as leis federais são public. :D.
flw!

entao o default e protected ? mas eu estou herdando igual como foi declarada… somente com o void

Criado 11 de julho de 2010
Ultima resposta 12 de jul. de 2010
Respostas 5
Participantes 3