ai vai uma sobre interfaces, quem sabe interpretar corretamente oq esse código faz? Como sempre, não vale compilar! …la no exame vcs não terão o javac pra ajudar… vamo la galera, essa ai elaborei sozinho, aborda detalhes importantes de interfaces!
package com.foo;
class FooClass implements F1, F2 {
public void FooClass()
{
System.out.println( "Construtor" );
}
void doStuff()
{
System.out.println( "metodo doStuff()" );
}
static public void main( String[] args )
{
new FooClass().doStuff();
}
}
interface F1 {
abstract void doStuff();
}
abstract interface F2 extends F3 {
void doStuff();
}
interface F3 {
public void FooClass();
}
bom pelo q eu entendi, num vai compilar, pq eu li no tutorial da sun, q uma classe abstrata num precita ter methodo abstrato, mas um metodo abstrado precisa estar num classe abstrata.
entaum, lá no interfce F1 tem um metodo abstrado, mas q num tá numa interface abstrada. ai eu creio q naum compila
tb não!.. não tem como ter esses problemas de herança múltipla… o método só tem a mesma assinatura nas duas interfaces, elas não conhecem nada da implementação dele… então, nao tem problema nenhum… não há método duplicado… mais alguém tenta?
Felipe, quaaase cara! heheahaha, um dos problemas tu resolveu… mas a saida não será essa não… ehhehehe, tu não deixa de estar certo, o método FooClass() é um método qualquer… só tem o mesmo nome de um construtor, mas não é construtor… vamos lá gente, sem compilar… quem é o próximo?
hahahhaa, olha o avatar novo do JavaTeco… hahahhaha, então ok, vamos a resposta… seguinte, lembrem-se de q todo método de uma interface é implicitamente public abstract ok? agora… em FooClass eu tento implementar esse método doStuff() … certo? mas vejam como coloquei a assinatura do método em FooClass:
void doStuff()
{
...
}
…agora, ligando as coisas… se um método de interface é implicitamente public abstract… e eu estou implementando o método doStuff sem modificador de acesso, quer dizer q ele tem acesso padrão, correto? …agora, há um porém, não se pode mudar o acesso de um método pra ser mais restritivo do q o da superclasse ou interface q implementa!
… se o método na interface é public abstract doStuff(), ele não pode ter acesso padrão, nem protected, nem private! o public é o acesso menos restritivo de todos, e ao implementar ele com acesso padrão, estarei violando essa regra do compilador! essa foi dificil de descobrir né? se cair uma dessas no exame ja é sacanagem… ehehheehaeha
[quote=“matheus”]hahahhaa, olha o avatar novo do JavaTeco… hahahhaha, então ok, vamos a resposta… seguinte, lembrem-se de q todo método de uma interface é implicitamente public abstract ok? agora… em FooClass eu tento implementar esse método doStuff() … certo? mas vejam como coloquei a assinatura do método em FooClass:
void doStuff()
{
...
}
…agora, ligando as coisas… se um método de interface é implicitamente public abstract… e eu estou implementando o método doStuff sem modificador de acesso, quer dizer q ele tem acesso padrão, correto? …agora, há um porém, não se pode mudar o acesso de um método pra ser mais restritivo do q o da superclasse ou interface q implementa!
… se o método na interface é public abstract doStuff(), ele não pode ter acesso padrão, nem protected, nem private! o public é o acesso menos restritivo de todos, e ao implementar ele com acesso padrão, estarei violando essa regra do compilador! essa foi dificil de descobrir né? se cair uma dessas no exame ja é sacanagem… ehehheehaeha[/quote]
Puts… Não consegui ver isso… sei o conceito e não consegui ver… muito boa mesmo Matheus… poste +…