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

Dominando Herança em Java: Subclasses, Superclasses e Princípios Fundamentais

Herança é o processo onde uma classe adquire as propriedades (métodos e campos) de outra. Com herança, a informação torna-se gerenciável em ordem hierárquica.

Palavra-chave extends

extends é a palavra-chave para herdar propriedades de uma classe.

Sintaxe

class Super {
    // ...
}

class Sub extends Super {
    // ...
}

Código de Exemplo

Exemplo demonstrando herança. My_Calculation herda addition() e Subtraction() de Calculation.

class Calculation {
    int z;

    public void addition(int x, int y) {
        z = x + y;
        System.out.println("A soma dos números: " + z);
    }

    public void Subtraction(int x, int y) {
        z = x - y;
        System.out.println("A diferença dos números: " + z);
    }
}

public class My_Calculation extends Calculation {
    public void multiplication(int x, int y) {
        z = x * y;
        System.out.println("O produto dos números: " + 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);
    }
}

Saída:

A soma dos números: 30
A diferença dos números: 10
O produto dos números: 200

Quando um objeto de My_Calculation é criado, uma cópia do conteúdo da superclasse é feita dentro dele. Por isso, usando o objeto da subclasse, acessa-se membros da superclasse.

Uma variável de referência da superclasse pode conter objeto da subclasse, mas com ela só se acessa membros da superclasse. Para acessar membros de ambas, recomenda-se criar referência da subclasse.

Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);
// demo.multiplication(a, b); // ERRO: multiplication() pertence à subclasse

Nota: Subclasse herda todos os membros (campos, métodos, classes aninhadas). Construtores não são membros, logo não são herdados, mas construtor da superclasse pode ser invocado da subclasse.

A Palavra-chave super

super é semelhante a this. Usado para:

Diferenciando Membros

super.variable
super.method();

Exemplo

class Super_class {
    int num = 20;
    public void display() {
        System.out.println("Este é o display da superclasse");
    }
}

public class Sub_class extends Super_class {
    int num = 10;
    public void display() {
        System.out.println("Este é o display da subclasse");
    }

    public void my_method() {
        Sub_class sub = new Sub_class();
        sub.display();
        super.display();
        System.out.println("Valor de num na subclasse: " + sub.num);
        System.out.println("Valor de num na superclasse: " + super.num);
    }

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

Saída:

Este é o display da subclasse
Este é o display da superclasse
Valor de num na subclasse: 10
Valor de num na superclasse: 20

Invocando Construtor da Superclasse

Subclasse adquire automaticamente construtor padrão da superclasse. Para chamar construtor parametrizado, use super(valores).

Exemplo

class Superclass {
    int age;
    Superclass(int age) {
        this.age = age;
    }
    public void getAge() {
        System.out.println("Valor de age na superclasse: " + age);
    }
}

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

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

Saída:

Valor de age na superclasse: 24

Relacionamento IS-A

IS-A significa: "Este objeto é um tipo daquele objeto".

public class Animal { }
public class Mammal extends Animal { }
public class Reptile extends Animal { }
public class Dog extends Mammal { }

Verdades:

IS-A:

Com extends, subclasses herdam todas as propriedades da superclasse, exceto as private.

Podemos verificar com operador instanceof:

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); // true
        System.out.println(d instanceof Mammal); // true
        System.out.println(d instanceof Animal); // true
    }
}

Palavra-chave implements

implements é usado com classes para herdar propriedades de uma interface. Interfaces nunca podem ser estendidas por classes.

public interface Animal { }
public class Mammal implements Animal { }
public class Dog extends Mammal { }

Relacionamento HAS-A

Baseado no uso. Determina se uma classe TEM-UM certo recurso. Reduz duplicação de código e bugs.

public class Vehicle { }
public class Speed { }
public class Van extends Vehicle {
    private Speed sp;
}

Van HAS-A Speed. Classe separada para Speed permite reuso em múltiplas aplicações. Van esconde detalhes de implementação; usuário pede ação a Van, que faz ou delega.

Tipos de Herança

Java não suporta herança múltipla (uma classe não pode estender mais de uma classe):

// ILEGAL
public class extends Animal, Mammal { }

Porém, uma classe pode implementar múltiplas interfaces, resolvendo a limitação.

Java

  1. Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
  2. Operador instanceof em Java: Guia Completo
  3. Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
  4. Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
  5. Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
  6. Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
  7. Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
  8. Dominando Java Generics – Construindo Código Reutilizável e Type-Safe
  9. Dominando Operações de Arquivo em Java com java.io – Criação, Leitura, Escrita e Exclusão
  10. Dominando Herança em C#: Construa Código Reutilizável e Manutenível