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?

  1. É necessário que a programação lide com situações diferentes pelo uso de Ligação estática e dinâmica.
  2. 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.
  3. 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.
  4. 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.
  5. 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

  1. 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.
  2. Na Ligação estática, o tipo é usado enquanto a Ligação dinâmica usa objetos para Ligações.
  3. 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.
  4. 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.
  5. 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:

  1. Tipos de hospedagem na web
  2. Sobrecarga e substituição em Java
  3. Diretivas AngularJS
  4. Polimorfismo em Java
  5. Método estático JavaScript | Trabalhando | Exemplos