O uso adequado de Interface Java

Jonathan DeLorenzo:

I originalmente criado uma interface contendo todos os métodos que seriam compartilhados entre duas classes, no entanto, eu percebi que eu queria ambas as classes têm os mesmos métodos, mas eles vão se comportar de forma diferente.

Eles terão o mesmo tipo de retorno, mas diferentes parâmetros. Eu não consigo descobrir como implementar isso, ou mesmo se eu descobrir como implementar isso, eu não sei se seria a maneira correta de lidar com a situação

Basicamente, eu vim aqui procurando a abordagem de arquitetura correta para o meu o que estou tentando realizar e eu não sei o que seria. Eu acho que eu tenho 4 perguntas para determinar a arquitetura de código:

  1. É uma interface a abordagem aqui mesmo, em caso afirmativo por quê?
  2. É uma classe abstrata a abordagem aqui mesmo, em caso afirmativo por quê?
  3. Isto parece que seria um tema comum com OOP, por isso, quero dizer que tem uma função-lhe o que se comportam de forma diferente dada uma classe particular. Como código deve ser projetado?
  4. Por último, o meu primeiro pensamento foi: "Oh, eu só irá substituir o método em uma das classes", mas isso está me dando uma dor de cabeça enorme e não está funcionando. Eu sinto como se eu nunca tenho este problema ao tentar substituir métodos. É substituir um método de uma interface mais complexa?

public interface Character {
    public void setAttack();
}

/*the setAttack method here will be set by the programmer. The 3 values 
 passed by the programmer are then stored into an array*/
public class Player implements Character {
  public void setAttack(int x, int y, int z) {

    attackArray[0] = x;
    attackArray[1] = y;
    attackArray[2] = z;
  }
}

/*the setAttack will still serve the same purpose as the setAttack in the 
 player class, however, the values will be auto generated randomly once the 
 setAttack function is called for the NPC instance.*/

/*Another thought I had is passing the function that auto generates the 3 
integer values (numGen()) as a parameter 3 times, however, I'm not sure if 
this is possible. Just a thought*/


public class NPC implements Character {
  public void setAttack(){

      for(int i = 0; i < attackArray.length; i++)
    {
        attackArray[i] = numGen();
    }
  }
}
GhostCat saudações Monica C.:

Há um equívoco conceitual: ter os mesmos métodos significa mais do que os métodos que têm o mesmo implementando nome .

Quando você usa polimorfismo e interfaces Java, então você está expressando intenção. Como em: classes que implementam algumas interfaces deve fornecer o correspondente "funcionalidade". Em outras palavras: este descreve um determinado comportamento.

Coisa é: quando a interface tem foo(), e diferentes classes pode querer um foo(X), e foo(Y), em seguida, a verdadeira questão é: que estes métodos têm mais em comum do que apenas o nome ?!

Se assim for, uma solução possível poderia ser uma outra camada de abstracção. No seu caso, como:

public interface AttackParameters {
...


public interface Character {  
  public void setAttack(AttackParameters parms);

ou algo semelhante. A idéia é novamente substitua detalhes "específicos" com uma solução genérica.

Alternativamente, você poderia usar um Map<String, Object>argumento para o seu setAttack()método. Em outras palavras: os parâmetros de ataque são identificados por strings.

Isso é agradável e dinâmico, mas bem, ele também evita segurança tempo de compilação. Uma versão ligeiramente melhor da abordagem mapa não iria usar cordas como chaves, mas alguns enum classe.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=197192&siteId=1
Recomendado
Clasificación