Classe abstrata

7 respostas
edymrex

Bem como nos sabemos uma classe abstrata não pode ser instancia, porque intão ela tem construtor…?
uma vez que não posso ter a instância da mesma, estou com essa dúvida porque no livro do deitel
tem uma classe abstrata com um construtor segue o código:

// Fig. 10.4: Employee.java
// Superclasse abstrata Employee.

public abstract class Employee
{
   private String firstName;
   private String lastName;
   private String socialSecurityNumber;

   // construtor com três argumentos
   public Employee( String first, String last, String ssn )
   {
      firstName = first;
      lastName = last;
      socialSecurityNumber = ssn;
   } // fim do construtor Employee com três argumentos

   // configura o nome 
   public void setFirstName( String first )
   {
      firstName = first;
   } // fim do método setFirstName 

   // retorna o nome
   public String getFirstName()
   {
      return firstName;
   } // fim do método getFirstName

   // configura o sobrenome 
   public void setLastName( String last )
   {
      lastName = last;
   } // fim do método setLastName 

   // retorna o sobrenome
   public String getLastName()
   {
      return lastName;
   } // fim do método getLastName

   // configura o CIC 
   public void setSocialSecurityNumber( String ssn )
   {
      socialSecurityNumber = ssn; // deve validar
   } // fim do método setSocialSecurityNumber

   // retorna o CIC
   public String getSocialSecurityNumber()
   {
      return socialSecurityNumber;
   } // fim do método getSocialSecurityNumber 

   // retorna a representação de String do objeto Employee
   public String toString()
   {
      return String.format( "%s %s\nsocial security number: %s", 
         getFirstName(), getLastName(), getSocialSecurityNumber() );
   } // fim do método toString

   // método abstrato sobrescrito pelas subclasses                 
   public abstract double earnings(); // nenhuma implementação aqui
} // fim da classe abstrata Employee

Porque essa classe tem construtor…?

7 Respostas

T

Uma classe abstrata pode ter construtor sim, só que ele só poderá ser invocado por uma subclasse que a estende. Digamos que você tenha uma superclasse Employee e uma subclasse Director. O construtor de Director pode ser:

public Director( String first, String last, String ssn, double salary )  {
    super (first, last, ssn); // invoca o construtor de Employee
    earnings = salary;
}
edymrex

valew thingol
super objetiva sua explicação…!

LPJava

ela tem construtor pq faz parte da herança java.lang.Object o que é nao pode ser é instanciada… vc nao poder dar um new em uma classe abstrata.

edilson_x

Detalhe, como essa classe tem um construtor que recebe argumentos e não foi declarado um construtor sem argumentos explicitamente, toda classe que a estender ao chamar o construtor da classe super deverá passar os argumentos obrigatóriamente.

// construtor com três argumentos   
   public Employee( String first, String last, String ssn )   
   {   
      firstName = first;   
      lastName = last;   
      socialSecurityNumber = ssn;   
   } // fim do construtor Employee com três argumentos

correto?

LPJava

correto, como ela nao tem um Construtor () entao quem extends a essa classe deve chamar os seus constratores… caso contrario nao compila… se a filha nao fizer super(…, … ). o codigo nao compila! :smiley:

Marcio_Nogueira

Uma classe abstrata define comportamento para as demais classes (classes filhas) que façam uso da herança dessa classe abstrata.

R

Quando instanciamos um objeto de uma classe, todos os construtores das superclasses (até chegar ao construtor de Object) da mesma são invocados obrigatoriamente.

Como uma classe abstrata “só existe para ser herdada”, ela PRECISA ter um construtor (implícito sem argumentos e com chamada a super(), ou explícito) que PRECISA obrigatoriamente ser invocado (mais uma vez implícita ou explicitamente) por suas subclasses no momento que instanciamos um objeto da subclasse.

Criado 3 de outubro de 2007
Ultima resposta 5 de out. de 2007
Respostas 7
Participantes 6