Introdução à ligação estática e ligação dinâmica
Estes são dois tipos de ligação. A ligação refere-se à associação da chamada do método ao corpo do método. Na ligação estática, toda a atribuição e declaração acontece no momento da compilação. Eles têm vários prós e contras um sobre o outro. No desempenho, a ligação estática é melhor que a ligação dinâmica dos métodos e variáveis. A ligação estática também é conhecida como ligação inicial. Como sabemos, os métodos Binding como static, private & final acontecem durante o tempo de compilação, enquanto no compilador de ligação dinâmica não decidem qual método será chamado.
Abaixo um exemplo é um exemplo melhor para entender
Exemplo 1
public class StaticBindingExample (
public static void main(String args()) (
Vehicle veh = new MotorBike();
veh.start();
)
)
class Vehicle (
static void start() (
System.out.println("vehicle will start now..");
)
)
class MotorBike extends Vehicle (
static void start() (
System.out.println("Bike will start now..");
)
)
No exemplo acima, podemos ver como a ligação estática se destina a impedir a sobrecarga da classe.
O exemplo abaixo mostrará como a Ligação dinâmica funciona, aqui o método da classe filho está substituindo a classe pai
Exemplo 2
public class StaticBindingExample (
public static void main(String args()) (
Vehicle veh = new MotorBike();
veh.start();
)
)
class Vehicle (
void start() (
System.out.println("vehicle will start now..");
)
)
class MotorBike extends Vehicle (
void start() (
System.out.println("Bike will start now..");
)
)
Neste exemplo, static não está presente no método start no método pai e filho, portanto, o método com o mesmo nome substituirá o método da classe pai. Isso acontece devido a isso.
Na captura de tela acima, a saída do programa é fornecida.
Por que ligação estática e ligação dinâmica?
- É necessário que a programação lide com situações diferentes pelo uso de Ligação estática e dinâmica.
- A ligação em tempo de compilação é conhecida como ligação inicial, isto é, quando é necessário declarar as coisas no momento da compilação (no início) da execução do programa. No Dynamic Binding, o Binding ocorre no tempo de execução, também conhecido como Late Binding.
- Método e variáveis, definidos como estático, final e privado, referem-se à Ligação Estática, enquanto os métodos virtuais que a Ligação ocorre no tempo de execução são conhecidos como Ligação Dinâmica.
- A Sobrecarga de Método / Sobrecarga de Operador usa Ligação Estática, por isso é um dos melhores exemplos, enquanto a Substituição usa Dinâmica, por isso é conhecida como o melhor exemplo de Ligação Dinâmica.
- Nisso, um objeto Real nunca é usado enquanto objeto real é usado na Vinculação Dinâmica.
Exemplos
No exemplo abaixo, podemos ver como a ligação estática acontece
Exemplo 1
// Implementação da classe pai
class Colony(
//Static method to start the electricity of the Colony
public static void start electricity()(
//printing the message here
System.out.println("Colony Electricity is On.");
)
)
//Child class implementation
class Building extends Colony(
//Static method to start the electricity of Building
public static void startElectricity()(
//printing the message here
System.out.println("Building Electricity is On.");
)
)
public class StaticBindingExample (
public static void main(String args()) (
//Creating object of the parent class type
Colony col = new Colony();
col.startElectricity();
//Creating object of the child class type
Colony col2 = new Building();
col2.startElectricity();
)
)
No programa acima, col é a variável de referência da classe de tipo Colony que aponta para o objeto da classe Colony. col2 também é a variável de referência da classe de tipo Colony, mas aponta para o objeto da classe Building. Quando a compilação ocorre, enquanto o compilador de ligação nunca verifica o tipo de objeto, apenas verifica o tipo de variável de referência.
No programa acima, como col .startElectricity (), o compilador verifica se a definição do método eletricidade inicial () existe na classe Colony ou não, porque col é do tipo Colony. Da mesma forma para a chamada do método col2.startElectricity (), verifica se o método start electric () está presente na classe Colony ou não, porque col2 também é do tipo Colony da classe. Não verifica para qual objeto col, col2 está apontando. esse tipo de ligação é conhecido como ligação estática.
Resultado:
A saída acima fornecida do programa mostra como os membros estáticos estão sendo usados para evitar a substituição.
Exemplo 2
No exemplo abaixo, podemos ver como a Vinculação dinâmica ocorre durante o tempo de execução
// Implementação da classe pai
class Colony(
//method to start the electricity of the Colony
void startElectricity()(
//printing the message here
System.out.println("Colony Electricity is On.");
)
)
//Child class implementation
class Building extends Colony(
//method to start the electricity of Building
void startElectricity()(
//printing the message here
System.out.println("Building Electricity is On.");
)
)
public class StaticBindingExample (
public static void main(String args()) (
//Creating object of the parent class type
Colony col = new Colony();
col.startElectricity();
//Creating object of the child class type
Colony col2 = new Building();
col2.startElectricity();
)
)
No programa acima, tudo é o mesmo que em um programa de exemplo estático, mas neste exemplo o membro do método "estático" é removido. Durante isso, o método do objeto principal para o qual col.startElectricity () está apontando será chamado. Enquanto na chamada col2.startElectricity (), o método do objeto principal para o qual a col2 está apontando será chamado. Esse tipo de ligação é conhecido como ligação dinâmica.
Resultado:
Vantagem
- A execução da ligação estática é mais eficiente e mais rápida que a dinâmica. Esse compilador Binding sabe que esses tipos de métodos não podem ser substituídos.
- Na Ligação estática, o tipo é usado enquanto a Ligação dinâmica usa objetos para Ligações.
- Uma das principais vantagens do Dynamic Binding é a flexibilidade, devido à flexibilidade de uma única função lidar com diferentes tipos de objetos em tempo de execução.
- Na Ligação Estática, Todas as informações necessárias antes do tempo de compilação, enquanto na Ligação Dinâmica, nenhuma informação permanece disponível antes do tempo de execução.
- A ligação estática pode ocorrer usando funções normais, enquanto a ligação dinâmica pode ser obtida usando as funções virtuais.
Conclusão
Esses são alguns dos conceitos importantes da programação orientada a objetos. Ligação refere-se à execução do código. Isso acontece no momento da compilação, enquanto a Vinculação Dinâmica acontece no tempo de execução. Definição, Declaração e Escopo da declaração, esses são três pilares importantes da Ligação Estática, enquanto na Ligação Dinâmica, nome da Vinculação e vida útil das questões vinculativas.
Artigos recomendados
Este é um guia para ligação estática e ligação dinâmica. Aqui discutimos a introdução, usos e vantagens. Você também pode consultar nossos outros artigos sugeridos para saber mais:
- Tipos de hospedagem na web
- Sobrecarga e substituição em Java
- Diretivas AngularJS
- Polimorfismo em Java
- Método estático JavaScript | Trabalhando | Exemplos