Acredito que a maioria das pessoas está mais familiarizada com as duas coisas de "herança" e "combinação" em Java. Este artigo discutirá principalmente esses dois tópicos. Se eu escrevo algo errado, ou é infantil e o argumento não está claro, todos podem deixar uma mensagem para me corrigir.
Suponha que haja 2 classes: A e B :
extends B, dizemos que A herda B, A é uma subclasse e B é uma classe pai, e este caso é herança.Pense em que circunstâncias geralmente consideramos essas duas coisas? Pensei nisso brevemente e muitas vezes há os seguintes cenários:
interface abstract class é extraída Depois de pensar nisso, parece que existem realmente apenas essas duas situações, mas essas duas situações têm um relacionamento especial. Por exemplo, a coisa do código público pode realmente ser alcançado abstract class e interface abstrata (o método padrão no Java 8).
Bem, depois de dizer tanta bobagem, vou jogar meu ponto de vista. Bem -vindo a:
abstract class ou interface abstrata Um exemplo mais comum: em projetos reais, geralmente definimos POJO ou model , e esses modelos geralmente têm alguns atributos com o mesmo substantivo e tipo, como:
// db table primary keyprivate int id; É muito comum, mas conheci muitos colegas no meu trabalho real. O sistema define uma classe com o nome BaseModel ou RootModel , coloca o id do atributo acima e, em seguida, todos os modelos em todo o projeto herdam essa classe Basemoddel. Gostaria de saber se você já conheceu esses colegas? Quais são os benefícios e desvantagens de escrever assim?
Vamos falar sobre os benefícios primeiro. Se você precisar dizer quais benefícios ele pode trazer, não vê benefícios substanciais, exceto para digitar o teclado algumas vezes e perder esses atributos na subclasse. No entanto, causou coisas muito problemáticas à manutenção subsequente do projeto.
Então vamos falar sobre os possíveis problemas deste escrito:
Um dia, por alguns motivos, você deseja descobrir onde usar o
iddo atributo na subclasse A (herdando o modelo de base) no projeto
Você é inteligente e habilmente usado find usages no IDE e, em seguida, descobrirá que encontrou muitos locais de uso, e muitos deles não são o que você se importa. Mas não há como você procurar o local de uso do ID da propriedade de outras classes que herdam o BasEmodel. Se o projeto não for grande, você pode ter menos proficiências. E se o projeto for um pouco maior? Quando você tem mais de 50 proficiência em pesquisa, o que você fará a seguir?
Como evitar essa situação? Isto é, não use BaseModel como este para usar a herança do atributo. Obviamente, por uma questão de período rigoroso, ainda preciso explicar esse significado em detalhes. Não me oponho completamente à herança do atributo. Vamos esclarecer:
O que eu objeto é que todos os modelos de todo o projeto herdam um modelo de base e, em seguida, colocam as propriedades comuns no BasEmodel
Essa idéia é observar que é para todo o projeto
Pessoalmente, muitas vezes encontro exemplos dos livros negativos acima, então vou falar sobre eles separadamente. Não tenho certeza se isso aconteceu em seus projetos. De qualquer forma, fui enganado por meus colegas por muitas vezes.
Quanto a outros erros comuns relacionados à "combinação" e "herança", ainda não pensei nisso (pelo menos acho que ninguém o conseguirá). Se eu acho claramente no futuro, ou se os leitores tiverem outras sugestões, espero que você possa deixar uma mensagem para se comunicar.