Na propria API do java é utilizado muito isto, repare que temos uma interface List, como boa pratica você deve sempre utilizar ela como referencia, pois em alguma versão para frente do java, ou até mesmo você precisar criar uma nova lista, voce implementa o List, e todo o seu código não vai ser preciso mudar, apenas onde é feito a instancia da lista.
class Funcionario{
protected String nome;
}
class Gerente extends Funcionario{}
class Diretor extends Funcionario{}
class Funcionario{
protected String nome;
}
class Gerente extends Funcionario{}
class Diretor extends Funcionario{}
Seria herança, e não interface.
O que tenho em mente é que não quero herdar, e nem implementar. Somente utilizar o poder de polimorfismo.
Ola… achei interessante essa abordagem… mas nao entendi uma coisa.
Ao utilizar os objetos f1 e f2 que sao do tipo Funcionario, eles entao nao terao nenhum atributo e nenhum metodo a nao ser aqueles que ja herdam por default da classe Object.
Realmente, interfaces de marcação são estranhas; só faz sentido usá-las em casos específicos. Como, por exemplo, quando você quer fazer alguma magia negra para pegar só as classes que representam seus modelos via reflection ou alguma coisa do tipo…
F1 e F2 são apenas variáveis de referências, com objetos diferentes (diretor e gerente), mas quando for utilizar o método Administrar, esse método vai receber um variável do tipo Funcionario.
Talvez eu não tenha conseguido exprimir a minha dúvida, mas colocando em palavras simples, posso utilizar interface sem métodos e sem constates (public static final)?
F1 e F2 são apenas variáveis de referências, com objetos diferentes (diretor e gerente), mas quando for utilizar o método Administrar, esse método vai receber um variável do tipo Funcionario.
Talvez eu não tenha conseguido exprimir a minha dúvida, mas colocando em palavras simples, posso utilizar interface sem métodos e sem constates (public static final)?[/quote]
Ainda nao entendi o exemplo do metodo administrar…
Vai receber e faria o que com os objetos f1 e f2?? Sendo que o atributo f1 e f2 sao do tipo Funcionario que nao tem nada nele…
Dentro do metodo administrar eu colocaria f1. e dai nao teria nada para chamar, nem um metodo para chamar
[quote=leandros.silva]
Talvez eu não tenha conseguido exprimir a minha dúvida, mas colocando em palavras simples, posso utilizar interface sem métodos e sem constates (public static final)?[/quote]
Você pode fazer isso, só tenha certeza de que essa interface representa um conceito forte, como você fez ali com o tipo funcionário. A tendência é que a medida que esse sistema cresça, a interface acabe ganhando métodos.
Vai invocar o método e realizar uma tarefa. O que eu preciso é do polimorfismo, pois não vou criar dois métodos (um que recebe diretor e outro gerente). Crio somente um método que recebe funcionário, sendo que direitor e gerente é um funcionario atráves da interface.
O método Administrar é apenas um método que realizar uma ação seja ela qual for, é só para exemplificar.