A execução de um programa Java requer duas etapas: compilação e execução (interpretação), e o Java é uma linguagem de programação orientada a objetos. Quando a subclasse e a classe pai têm o mesmo método, a subclasse substitui o método da classe pai. Quando o programa chama o método em tempo de execução, se o método da classe pai é chamado ou a subclasse é substituída, esse deve ser um problema que encontramos quando estamos começando a aprender Java. Aqui, primeiro determinamos qual método a ser implementado ou operação variável para determinar essa chamada é chamada de ligação.
Existem dois métodos de ligação em Java, um é a ligação estática, também conhecida como ligação precoce. Outro tipo é a ligação dinâmica, também conhecida como ligação tardia.
O conceito de ligação ao programa:
A ligação refere -se à associação de uma chamada de método com a classe (o corpo do método) onde o método está localizado. Para Java, a ligação é dividida na ligação estática e na ligação dinâmica; ou é chamado de ligação precoce e ligação tardia.
Ligação estática (ligação antecipada do compilador de ligação):
O método foi vinculado antes da execução do programa e é implementada pelo compilador ou outro programa de conexão. Por exemplo: C. Para Java, ele pode ser entendido como vinculativo durante o período de compilação do programa; Especificamente, os únicos métodos em Java são finais, estáticos, privados e construtores que são pré-vinculados
Vinculação dinâmica (ligação tardia durante o tempo de execução):
Ligação posterior: liga -se de acordo com o tipo de objeto específico em tempo de execução.
Se um idioma implementar a ligação tardia, é necessário fornecer alguns mecanismos para determinar o tipo de objeto durante a operação e chamar métodos apropriados separadamente. Em outras palavras, o compilador ainda não conhece o tipo de objeto no momento, mas o mecanismo de chamada de método pode investigá -lo por si só e encontrar o corpo do método correto. Diferentes idiomas têm diferentes maneiras de implementar a ligação tardia. Pode -se pensar que todos precisam inserir certos tipos especiais de informações no objeto.
Processo de ligação dinâmica:
Resumo sobre a ligação:
Depois de entender o conceito dos três, descobrimos que Java pertence à ligação tardia. No Java, quase todos os métodos são de ligação tardia e os métodos de ligação dinamicamente são subclasses ou classes base em tempo de execução. Mas também existem recursos especiais. Como os métodos estáticos e os métodos finais não podem ser herdados, seus valores podem ser determinados no momento da compilação. Eles pertencem à ligação precoce. Para serem particularmente observados, os métodos e as variáveis de membros declarados por privados não podem ser herdados por subclasses, e todos os métodos privados são especificados implicitamente como final (a partir disso, sabemos que o método declarado como tipo final é impedir que o método seja substituído e efetivamente estremecer a ligação dinâmica em Java). Pós-ligação em Java é implementado pela JVM. Não precisamos declará -lo explicitamente, mas o C ++ é diferente. Devemos declarar explicitamente que um método tem pós-ligação. A transformação ascendente ou o polimorfismo em Java é alcançado através da ligação dinâmica; portanto, entender a ligação dinâmica significa transformação e polimorfismo ascendente.
Para métodos em Java, exceto para os construtores finais, estáticos, privados e que são vinculativos precoces, todos os outros métodos são a ligação dinâmica. A ligação dinâmica típica ocorre sob a declaração de conversão da classe pai e da classe infantil:
Por exemplo: pai P = New Children ();
O processo específico é o seguinte:
1. O compilador verifica o tipo de declaração e o nome do método do objeto. Suponha que chamamos o método XF (ARGS) e X foi declarado como objeto da Classe C, então o compilador listará todos os métodos nomeados F na classe C e os métodos herdados da superclasse da classe C.
2. Em seguida, o compilador verifica os tipos de parâmetros fornecidos na chamada do método. Se um tipo de parâmetro entre todos os métodos com o nome f corresponder ao tipo de parâmetro fornecido pela chamada mais, esse método será chamado. Este processo é chamado de "análise de sobrecarga"
3. Quando o programa é executado e usa a ligação dinâmica para chamar métodos, a máquina virtual deve chamar uma versão de método que corresponda ao tipo real do objeto apontado por x. Supondo que o tipo real seja d (uma subclasse de C), se a classe D definir f (string), o método será chamado, caso contrário, o método f (string) será pesquisado na superclasse de d e assim por diante.
Pergunta pensamentos:
Como fornecer a um método Usuário um método para concluir uma tarefa. Se o usuário tiver requisitos especiais, ele precisará personalizar seu próprio método?
Conhecimento envolvido:
Classe de pais, interface, transformação ascendente, ligação dinâmica
Código específico:
pacote com.chengxuyuanzhilu; interface pública MyInterfaces {void Doting ();} pacote com.chengxuyuanzhilu; classe pública Drink implementa MyInterfaces {@Override public void Doting () {System.out.println ("I'm Drinking Water"); }} pacote com.chengxuyuanzhilu; classe pública Eat implementa MyInterfaces {@Override public void Doting () {System.out.println ("I'm Comer"); }} pacote com.chengxuyuanzhilu; classe pública Run implementa myinterfaces {@Override public void Doting () {System.out.println ("I'm Running"); }} pacote com.chengxuyuanzhilu; classe pública testynamicbind {public static void main (string [] args) {myInterfaces my = null; my = new Eat (); vincular (meu); minha = nova bebida (); vincular (meu); my = new run (); vincular (meu); } Void estático Bind (MyInterfaces My) {my.Doting (); }}O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.