Pergunta

É uma boa prática para permitir que classes abstratas definir variáveis ??de instância?

public abstract class ExternalScript extends Script {

    String source;

    public abstract void setSource(String file);

    public abstract String getSource();
}

A classe sub, ExternalJavaScript.class, seria então receber automaticamente a variável de origem, mas eu sinto que é mais fácil de ler o código, se todas as subclasses próprios definir a fonte, em vez de herança.

Qual é o seu conselho?

/ Adam

Foi útil?

Solução

Eu teria pensado que algo como isso seria muito melhor, uma vez que você está adicionando uma variável, então por que não restringir o acesso e torná-lo mais limpo? Seus getter / setters deve fazer o que eles dizem sobre o estanho.

public abstract class ExternalScript extends Script {

private String source;

public void setSource(String file) {
    source = file;
}

public String getSource() {
    return source;
}

Trazendo essa volta à questão, você nunca se preocupar olhando para onde o código getter / setter é quando lê-lo? Se tudo que eles fazem obter e definir, em seguida, você não precisa se preocupar com o que a função 'não' ao ler o código. Há algumas outras razões para pensar demasiado:

  • Se a fonte foi protegida (tão acessível por subclasses), em seguida, o código fica confuso: quem está mudando as variáveis? Quando é um objeto torna-se então difícil quando você precisa refatorar, enquanto um método tende a facilitar essa etapa.
  • Se o seu getter métodos / setter não estão recebendo e configuração, em seguida, descrevê-los como algo mais.

Pense sempre se sua classe é realmente uma coisa diferente ou não, e que deve ajudar a decidir se você precisar de alguma coisa mais.

Outras dicas

Claro .. Por que não?
classes base abstratas são apenas uma conveniência para o comportamento casa e comum de dados para 2 ou mais classes em um único lugar para a eficiência de armazenamento e manutenção. Sua um detalhe de implementação.
Tome cuidado, porém, que você não está usando uma classe base abstrata, onde você deve estar usando uma interface. Consulte classe de interface vs Base de

Claro. Toda a idéia de classes abstratas é que eles podem conter algum comportamento ou dados que você precisar de todos os sub-classes para conter. Pense no exemplo simples de WheeledVehicle - deve ter uma variável numWheels membro. Você quer todas as classes sub ter esta variável. Lembre-se que as classes abstratas são um recurso muito útil no desenvolvimento de APIs, como eles podem garantir que as pessoas que se estendem sua API não vai quebrá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top