[RESOLVIDO] Diferença de declarar uma class com ou sem extends

import javax.swing.JFrame;

Qual a diferença?
public class TelaPrincipal extends JFrame{
}

public class TelaPrincipal{
JFrame tela = new JFrame();

}

Com o “extends”, você está herdando os atributos e métodos do JFrame (lembrando que em herança não se herda o construtor).

Sem o “extends”, você está instanciando um JFrame novo, através da referência tela.

Ah, e um detalhe óbvio mas importante: No primeiro caso, você está usando noções de herança. No segundo, não.

[]'s

Tem vantagem? ou é só a redução de linha de código?

Existem vantagens, como por exemplo o modificador de visibilidade protected, que permite apenas que as classes filhas tenham acesso aos atributos/métodos.

Nesse caso específico, acredito que tenha algumas vantagens como poder setar os atributos do seu JFrame com o this.

As vantagens da herança incluem também reutilização do código, como você citou em “redução de linha”.

É legal você dar uma estudada nisso. Tem as noções de superclasse, subclasse, enfim…

Aqui tem uma material bacana sobre isso.

E obviamente, não vou deixar de citar o curso fantástico que a Alura tem sobre isso.

Herança não tem nada a ver com redução de código.

Herança você usa quando você quer estabelecer um relacionamento do tipo “é um”.

Quando você escreve

class TelaPrincipal extends JFrame {
}

Você está dizendo que a classe TelaPrincipal é um JFrame.

Quando você escreve:

class TelaPrincipal{
    JFrame tela = new JFrame();
}

Você está dizendo que a classe TelaPrincipal tem um atributo do tipo JFrame chamado tela.

2 curtidas

Como boa prática de programação, qual formato você utiliza? ou depende da situação?

Depende da situação.
Se você quer criar uma relação do tipo É UM, você estende.
Se você quer criar uma relação do tipo TEM UM, você encapsula.

Sinceramente, agora não entendi esse de “é um” “tem um” poderia me dar um explicação quanto a isso?
é relacionado aos tipos de relação de agregação e composição?

A relação TEM UM está relacionada à agregação ou composição sim.
Diferença básica entre agregação e composição:
Agregação: O objeto pode ter um atributo de determinado tipo.
Composição: O objeto deve ter um atributo de determinado tipo.

1 curtida