JayCesar / uni_life

0 stars 0 forks source link

Herança #3

Open JayCesar opened 2 months ago

JayCesar commented 2 months ago

📚 Definição

É a capacidade de linguagens orientadas a objetos de permitir que classes herdem estados e comportamentos comuns a outras classes.

image image

image image

A hierarquia de classes em java é uma árvore. Uma classe só pode ter UMA SUPER CLASSE

image

Todo objeto é do tipo Object! É um tipo coringa!

image

Obs: Herança é uma associação entre classe (e não entre objetos)


image

Polimorfismo

image

Obs: quando eu utilizo a palavrinha abstract eu digo para as subclasses que elas precisam implementar do jeito delas esse método

image

Ou seja, eu devo obrigatoriamente implementar o método quando for abstract, se não for, eu não preciso! Além disso, a classe é Abstrata! Logo eu não posso instanciar ela!

A anotação Override é opcional, porém fortemente recomendado. Se eu não adicionar nos métodos que eu sobrescrever, o compilador irá gerar um aviso (warning);

Classe abstrata:

⭐Diferença entre abstrata e interfaces Interfaces definem apenas protótipos de método! Classe abstrata definem implementações (com dados e métodos), vai além do que um simples contrato


Perguntas:

image Não pode! Se eu prometi voltar número, então eu devolvo númer!

image Agora sim, eu posso devolver número porque NúmeroImaginário é do dipo Número


Herança Múltipla

image

Eu consigo fazer uma interface herdar interfaces, isso seria herança múltipla!

Há herança simples e herança múltipla

image Obs: O animal ali seria animalvertebrado, foi um leve bug

Todo comportamento é sempre o mais específico!

Por via de regra eu devo chamar o construtor da superclasse!

public static void main(String args[]) {
  Animal totó = new Cachorro (); // Assim é melhor
  Cachorro rex = new Cachorro (12000); 
}

HERANÇA E SOBREPOSIÇÃO DE MÉTODOS (METHOD OVERRIDING)

image

SOBRECARGA DE MÉTODO (METHOD OVERLOADING)

image

CLASSES E MÉTODOS ABSTRATOS

image

In Java, an abstract class can have both abstract methods (methods without a body) and non-abstract methods (methods with a body).

abstract class Shape {
    // Abstract method
    public abstract double area();

    // Non-abstract method
    public void display() {
        System.out.println("This is a shape.");
    }
}

In this example, area() is an abstract method because it doesn't have a body, and display() is a non-abstract method because it has a body. Subclasses of Shape would be required to provide an implementation for the abstract area() method but could inherit the display() method as it is.

Example: image

Quem define como será o logIn(), sendData() e logOut() serão as classes filhas.

CLASSES ABSTRATAS VS. INTERFACES

image Qual usar? image image image

Obs: In Java, you can check the type of a list by examining the types of its elements. You can do this by iterating over the list and checking each element's type using the instanceof operator.

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Object> myList = new ArrayList<>();
        myList.add("Hello");
        myList.add(123);
        myList.add(3.14);

        // Check the type of each element in the list
        for (Object element : myList) {
            if (element instanceof String) {
                System.out.println("String: " + element);
            } else if (element instanceof Integer) {
                System.out.println("Integer: " + element);
            } else if (element instanceof Double) {
                System.out.println("Double: " + element);
            } else {
                System.out.println("Unknown type");
            }
        }
    }
}

Um objeto pode assumir outros tipos, isso é polimorfismo!