Classe abstrata

3 respostas
W

Bom dia a todos,
ainda estou com dúvidas sobre a classe abstrata.

Já vi alguns exemplos mas só queria confirmar se entendi realmente seu uso.

Sei que ela só pode ser estendida, não instanciada.

Desta forma, quando eu estender ela em outra classe não poderei chamar seus métodos mais de uma vez?

Porque na classe concreta eu posso instanciar o objeto várias vezes é isso?

E outra coisa, pra que server a chamada “super()” ?

Obrigado a todos.

3 Respostas

Rodrigo_Sasaki

O começo você disse certo. A classe abstrata não pode ser instanciada.

Se você criar uma classe que estende à uma classe abstrata, terá que implementar todos os métodos abstratos que ela declarou (a não ser que sua nova classe também seja abstrata, o que é perfeitamente possível).

Você pode "chamar" os métodos quantas vezes quiser, se é que eu entendi isso certo :)

E a chamada a super() faz referência ao construtor da Superclasse. Os construtores sempre chamam a super(), mesmo se você não deixar isso explícito no seu código. Se você tiver 2 classes:
public class A{

}
public class B extends A{

}
Object é a superclasse de A, que por sua vez é a superclasse de B. Então se você fizer:
new B();
Será executado o construtor de Object, depois o construtor de A e depois o construtor de B. Fez sentido?
ErickRAR
Sei que ela só pode ser estendida, não instanciada.
Correto.
Desta forma, quando eu estender ela em outra classe não poderei chamar seus métodos mais de uma vez? Porque na classe concreta eu posso instanciar o objeto várias vezes é isso?

Pode chamar os métodos normalmente. Não muda nada em relação a isso.

E outra coisa, pra que server a chamada "super()" ?

o super() é para chamar a instancia da classe acima.
Toda classe extende Object, então digamos que você tenha:

public class Funcionario {

 public Funcionario(){
super();
}
Esse código cria um construtor vazio e chama a chama também o construtor de Object. Na verdade ele é bem inútil, ja que isso ja em implicito na classe(tanto o construtor vazio quanto a chamada do super()), não é necessário declarar. É melhor utilizado caso você tenha construtores com parametros na classe Pai. OBS: Caso tenha que chamar o super() no construtor, ele tem que sempre ser o primeiro a ser chamado. Você não conseguirá compilar o código abaixo:
public class Funcionario {
	
	public Funcionario(){
		System.out.println("Vá fazer alguma coisa!");
		super();
	}
}
W

Entendi.
Agora uma pergunta.
Qual a sua utilização sendo que poderíamos criar os métodos dentro da própria classe concreta?

ex:

public class Classe02{

    private double salario;
    
    public void funcionario(){
        this.setSalario(500.25);
        System.out.print(this.getSalario()+"\n");
    }
    public void setSalario(double salario){
        this.salario = salario;
    }
    public double getSalario(){
        return salario;
    }
}

Usando a classe abstract ficaria mais ou menos assim:

classe principal

public class Classe02 extendes Classe01{
    
    public void funcionario(){
        this.setSalario(500.25);
        System.out.print(this.getSalario()+"\n");
    }
}

classe abstrata

public abstract class Classe01 {
    
    double salario;
    
    public void setSalario(double salario){
        
        this.salario = salario;
    }
   public double getSalario(){
       return salario;
   }
}

Estou certo ou errado?

Criado 10 de dezembro de 2013
Ultima resposta 10 de dez. de 2013
Respostas 3
Participantes 3