Ligação de dados
Se precisar de café para acordar de manhã, alguns itens são muito importantes para você: café na xícara e um pouco de cafeína no café! Você não pode beber um conceito, você precisa beber.
Em Java, podemos criar uma classe para Coffee, mas até vincularmos a classe com variáveis, métodos, construtores e outros, é apenas uma classe. Digamos que adicionemos variáveis para contagem de feijão, conteúdo de cafeína e onças. Quando você cria uma nova instância de uma classe e acessa uma das variáveis subjacentes, esses itens são vinculados. Esta é a vinculação de dados . Nesse caso, seria fazer a aula Café e, digamos, acessar a variável cafeína . Isso seria vinculação de dados em nosso exemplo.
![]() |
Agora podemos declarar instâncias da classe Coffee e usar essas variáveis e métodos. O código a seguir declara duas instâncias de Coffee e atribui valores para a variável beans .
![]() |
Nesse caso, vinculamos a variável beans a myCoffee1 e a myCoffee2 (mas com valores diferentes). Cada uma dessas instâncias ocupa um lugar diferente na memória. Nem myCoffee1 nem myCoffee2 podem se comunicar. Nós (desculpem a gramática pobre, mas é a linguagem Java) ‘amarramos’ os dois juntos.
Cobrimos os fundamentos da vinculação de dados. Agora, vamos examinar dois tipos principais de vinculação que você verá em Java: vinculação estática e dinâmica.
Ligação estática
A ligação estática ocorre em tempo de compilação. Lembre-se de que campos e métodos vinculam-se a classes. Quando chamamos um método, Java irá ligá-lo em tempo de compilação ou em tempo de execução. Antes de entrarmos nas ervas daninhas, vamos dar uma olhada em nossa aula de Café novamente. Adicionamos um método chamado brew () que aceita cafeína e oz .
![]() |
Como nosso método é estático, significa que os métodos em Coffee pertencem à própria classe. Se você criou uma centena de instâncias de Coffee, você só faz referência aos campos / métodos uma vez. Na verdade, se você vir um método com a palavra-chave static, final ou private antes de seu nome, a vinculação será estática. Esses métodos SEMPRE fazem parte da classe, e apenas dessa classe.
Ligação Dinâmica
Agora, as coisas ficam interessantes. A vinculação dinâmica ocorre em tempo de execução porque Java não necessariamente saberá qual método / campo referenciar no tempo de compilação. Para ilustrar esse conceito, adicionaremos mais alguns códigos ao nosso aplicativo Coffee.
Primeiro, adicionaremos outro método à classe Coffee, que simplesmente exibe uma contagem de grãos. Este é público, não estático. Isso se tornará importante muito em breve:
![]() |
Um dos recursos do Java é que você pode ter uma subclasse ou classes filhas. Ou seja, podemos criar uma classe que herda tudo de Coffee, mas dar a ela seus próprios métodos e campos exclusivos. Ele ainda herda nosso método brew () e nossos campos (cafeína e oz). Nesse caso, criaremos uma classe filha chamada Peaberry (um tipo de café com um grão de formato exclusivo). Além disso, adicionaremos um método beanCount a ele. Sim, você pode ter o mesmo nome de método em uma classe filha! É chamado de substituição porque você está dizendo à classe filha para fazer algo diferente com o método herdado.
Aqui está o método beanCount na classe filha. Mesmo nome, mesmos parâmetros. No entanto, ele pega a contagem inserida e divide por 2.
![]() |
Se você fosse um compilador, como saberia qual método vincular a qual instância da classe? Sua única opção é descobrir isso em tempo de execução. É por isso que métodos como esse são processados / vinculados à instância em tempo de execução. Ao contrário de um método estático que não pode ser alterado, os métodos substituídos devem ser processados dinamicamente.
Agora, vamos colocar tudo isso junto. Em nossa função principal, declararemos uma instância de Coffee e uma instância de Peaberry, e chamaremos cada um dos métodos:
![]() |
Quando o programa é executado, vemos a saída estática primeiro, seguida pela saída da vinculação dinâmica de métodos.
![]() |
Java processou com sucesso todos os métodos. No entanto, ele executou a vinculação em tempo de compilação para o método estático, deixando os outros dois vinculados em tempo de execução.
Resumo da lição
Vamos revisar o que aprendemos sobre vinculação de dados em um sistema Java. Em Java, a vinculação de dados é a conexão entre classe e método, ou classe e campo. Uma Tree é legal, mas não está ligada a nada até que você crie uma instância de uma Tree e anexe um método grow (). Java trata a ligação estática ou dinamicamente.
A vinculação estática é feita em tempo de compilação. Isso é para métodos que não podem ser substituídos, como métodos estáticos ou finais. A vinculação dinâmica é feita em tempo de execução. Se usamos a substituição (usando o mesmo nome de método com um parâmetro diferente ou o mesmo nome de método em uma classe filha), Java precisa descobrir qual método é usado quando é executado. Não pode saber até que seja executado.