Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Java

Java - Herança


A herança pode ser definida como o processo onde uma classe adquire as propriedades (métodos e campos) de outra. Com o uso da herança, as informações são gerenciadas em uma ordem hierárquica.

A classe que herda as propriedades de outra é conhecida como subclasse (classe derivada, classe filha) e a classe cujas propriedades são herdadas é conhecida como superclasse (classe base, classe pai).

estende a palavra-chave


estende é a palavra-chave usada para herdar as propriedades de uma classe. A seguir está a sintaxe da palavra-chave extends.

Sintaxe
class Super {
   .....
   .....
}
class Sub extends Super {
   .....
   .....
}

Código de amostra


A seguir está um exemplo demonstrando a herança Java. Neste exemplo, você pode observar duas classes, a saber, Calculation e My_Calculation.

Usando a palavra-chave extends, o My_Calculation herda os métodos add() e Subtraction() da classe Calculation.

Copie e cole o seguinte programa em um arquivo com o nome My_Calculation.java

Exemplo
Demonstração ao vivo
class Calculation {
   int z;
	
   public void addition(int x, int y) {
      z = x + y;
      System.out.println("The sum of the given numbers:"+z);
   }
	
   public void Subtraction(int x, int y) {
      z = x - y;
      System.out.println("The difference between the given numbers:"+z);
   }
}

public class My_Calculation extends Calculation {
   public void multiplication(int x, int y) {
      z = x * y;
      System.out.println("The product of the given numbers:"+z);
   }
	
   public static void main(String args[]) {
      int a = 20, b = 10;
      My_Calculation demo = new My_Calculation();
      demo.addition(a, b);
      demo.Subtraction(a, b);
      demo.multiplication(a, b);
   }
}

Compile e execute o código acima conforme mostrado abaixo.
javac My_Calculation.java
java My_Calculation

Depois de executar o programa, ele produzirá o seguinte resultado -

Saída
The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200

No programa fornecido, quando um objeto para My_Calculation classe é criada, uma cópia do conteúdo da superclasse é feita dentro dela. É por isso que, usando o objeto da subclasse, você pode acessar os membros de uma superclasse.

A variável de referência Superclass pode conter o objeto da subclasse, mas usando essa variável você pode acessar apenas os membros da superclasse, portanto, para acessar os membros de ambas as classes, é recomendável sempre criar uma variável de referência para a subclasse.

Se você considerar o programa acima, você pode instanciar a classe conforme indicado abaixo. Mas usando a variável de referência da superclasse ( cal neste caso) você não pode chamar o método multiplication() , que pertence à subclasse My_Calculation.
Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);

Observação − Uma subclasse herda todos os membros (campos, métodos e classes aninhadas) de sua superclasse. Construtores não são membros, então eles não são herdados por subclasses, mas o construtor da superclasse pode ser invocado da subclasse.

A super palavra-chave


O super palavra-chave é semelhante a esta palavra-chave. A seguir estão os cenários em que a palavra-chave super é usada.

Diferenciando os membros


Se uma classe está herdando as propriedades de outra classe. E se os membros da superclasse tiverem os mesmos nomes da subclasse, para diferenciar essas variáveis ​​usamos a palavra-chave super conforme mostrado abaixo.
super.variable
super.method();

Código de amostra


Esta seção fornece um programa que demonstra o uso do super palavra-chave.

No programa fornecido, você tem duas classes:Sub_class e Super_class , ambos têm um método chamado display() com implementações diferentes e uma variável chamada num com valores diferentes. Estamos invocando o método display() de ambas as classes e imprimindo o valor da variável num de ambas as classes. Aqui você pode observar que usamos a palavra-chave super para diferenciar os membros da superclasse da subclasse.

Copie e cole o programa em um arquivo com o nome Sub_class.java.

Exemplo
Demonstração ao vivo
class Super_class {
   int num = 20;

   // display method of superclass
   public void display() {
      System.out.println("This is the display method of superclass");
   }
}

public class Sub_class extends Super_class {
   int num = 10;

   // display method of sub class
   public void display() {
      System.out.println("This is the display method of subclass");
   }

   public void my_method() {
      // Instantiating subclass
      Sub_class sub = new Sub_class();

      // Invoking the display() method of sub class
      sub.display();

      // Invoking the display() method of superclass
      super.display();

      // printing the value of variable num of subclass
      System.out.println("value of the variable named num in sub class:"+ sub.num);

      // printing the value of variable num of superclass
      System.out.println("value of the variable named num in super class:"+ super.num);
   }

   public static void main(String args[]) {
      Sub_class obj = new Sub_class();
      obj.my_method();
   }
}

Compile e execute o código acima usando a seguinte sintaxe.
javac Super_Demo
java Super

Ao executar o programa, você obterá o seguinte resultado -

Saída
This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20

Invocando o Construtor de Superclasse


Se uma classe está herdando as propriedades de outra classe, a subclasse adquire automaticamente o construtor padrão da superclasse. Mas se você quiser chamar um construtor parametrizado da superclasse, precisará usar a palavra-chave super conforme mostrado abaixo.
super(values);

Código de amostra


O programa fornecido nesta seção demonstra como usar a palavra-chave super para invocar o construtor parametrizado da superclasse. Este programa contém uma superclasse e uma subclasse, onde a superclasse contém um construtor parametrizado que aceita um valor inteiro, e usamos a palavra-chave super para invocar o construtor parametrizado da superclasse.

Copie e cole o seguinte programa em um arquivo com o nome Subclass.java

Exemplo
Demonstração ao vivo
class Superclass {
   int age;

   Superclass(int age) {
      this.age = age; 		 
   }

   public void getAge() {
      System.out.println("The value of the variable named age in super class is: " +age);
   }
}

public class Subclass extends Superclass {
   Subclass(int age) {
      super(age);
   }

   public static void main(String args[]) {
      Subclass s = new Subclass(24);
      s.getAge();
   }
}

Compile e execute o código acima usando a seguinte sintaxe.
javac Subclass
java Subclass

Ao executar o programa, você obterá o seguinte resultado -

Saída
The value of the variable named age in super class is: 24

Relação IS-A


IS-A é uma maneira de dizer:Este objeto é um tipo daquele objeto. Vamos ver como o se estende palavra-chave é usada para obter herança.
public class Animal {
}

public class Mammal extends Animal {
}

public class Reptile extends Animal {
}

public class Dog extends Mammal {
}

Agora, com base no exemplo acima, em termos de Orientação a Objetos, o seguinte é verdadeiro -

Agora, se considerarmos a relação IS-A, podemos dizer −

Com o uso da palavra-chave extends, as subclasses poderão herdar todas as propriedades da superclasse, exceto as propriedades privadas da superclasse.

Podemos garantir que Mammal é na verdade um Animal com o uso do operador de instância.

Exemplo
Demonstração ao vivo
class Animal {
}

class Mammal extends Animal {
}

class Reptile extends Animal {
}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Isso produzirá o seguinte resultado -

Saída
true
true
true

Como temos uma boa compreensão das extends palavra-chave, vejamos como os implementa palavra-chave é usada para obter o relacionamento IS-A.

Geralmente, os implementa palavra-chave é usada com classes para herdar as propriedades de uma interface. Interfaces nunca podem ser estendidas por uma classe.

Exemplo
public interface Animal {
}

public class Mammal implements Animal {
}

public class Dog extends Mammal {
}

A instância da palavra-chave


Vamos usar a instância de operador para verificar determinar se Mammal é realmente um Animal, e cão é realmente um Animal.

Exemplo
Demonstração ao vivo
interface Animal{}
class Mammal implements Animal{}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Isso produzirá o seguinte resultado -

Saída
true
true
true

Relação TEM-A


Essas relações são baseadas principalmente no uso. Isso determina se uma determinada classe TEM-A determinada coisa. Esse relacionamento ajuda a reduzir a duplicação de código, bem como bugs.

Vejamos um exemplo -

Exemplo
public class Vehicle{}
public class Speed{}

public class Van extends Vehicle {
   private Speed sp;
} 

Isso mostra que a classe Van HAS-A Speed. Por termos uma classe separada para Speed, não precisamos colocar todo o código que pertence a speed dentro da classe Van, o que possibilita reutilizar a classe Speed ​​em várias aplicações.

No recurso Orientado a Objetos, os usuários não precisam se preocupar com qual objeto está fazendo o trabalho real. Para conseguir isso, a classe Van oculta os detalhes de implementação dos usuários da classe Van. Então, basicamente o que acontece é que os usuários pediriam à classe Van para fazer uma determinada ação e a classe Van faria o trabalho sozinha ou pediria a outra classe para executar a ação.

Tipos de herança


Existem vários tipos de herança, conforme demonstrado abaixo.

Um fato muito importante a ser lembrado é que Java não suporta herança múltipla. Isso significa que uma classe não pode estender mais de uma classe. Portanto, seguir é ilegal -

Exemplo
public class extends Animal, Mammal{} 

No entanto, uma classe pode implementar uma ou mais interfaces, o que ajudou o Java a se livrar da impossibilidade de herança múltipla.

Java

  1. Palavra-chave final Java
  2. Java instanceof Operator
  3. Classe estática aninhada em Java
  4. Classe anônima Java
  5. Classe Java Singleton
  6. Reflexão Java
  7. Classe Java ObjectOutputStream
  8. Genéricos Java
  9. Classe de arquivo Java
  10. C# - Herança