Metodos Abstract e não-abstract

  Qual a diferença entre métodos abstract e  metódos não abstract?

Métodos abstratos são métodos sem corpo, nesse caso vc tem apenas a assinatura do método.
ex:

abstract public void autenticaFuncionario();

Quando um método é abstrato a classe que contiver o mesmo obrigatoriamente deve ser abstrata. :twisted:
ex:

abstract class Funcionario{
 String nome;
 int idade;

  abstract public void autenticaFuncionario();
}

A classe abstrata pode conter métodos concretos com corpo(ou seja com algum código entre as tags de abertura/{ e fechamente/} também chamado de bloco), além
de poder ter métodos sem corpo ou mais conhecido como métodos abstratos. :evil:
ex:

abstract class Funcionario{
String nome;
int idade;
double sal;

abstract public void autenticaFuncionario(); //este método contém apenas a assinatura 

public double calcBoneficacao(double sal){ 

/* já este contém uma codificação, mesmo que este não tenha nada entre as chaves de abertura e fechamento ainda será um método concreto*/
this.sal=sal *1.20;
}

}[/code]

Outra regra importante é que a classe que esteder uma classe com método abstrato deve implementa-lo. :twisted:

[code]public class Diretor extends Funcionario{

public void autenticaFuncionario(){
/* A classe mãe(Funcionario) passa a responsabilida da implementação do método( autenticaFuncionario(){} )para classe filha(Diretor), se a classe filha quiser passar a resposabilidade para outra classe a mesma também deve ser abstrata , independente disso a primeira classe que for concreta deve implementar todos os métodos abstratos de todas as classes anteriores. */

}

}[/code]

como regra final vc deve saber que classes abstratas não podem e nem devem ser instaciadas ou seja não podemos dar new nelas. :twisted:

O próprio compilador bloquea esta ação, vale ressaltar que classes abstratas existem para uma única finalidade servir como exemplo/classe modelo, afinal não faz
sentido instanciar um objeto funcionário.( o que esse objeto faz?quanto ganha?qual é seu cargo? percebe que o objeto dessa classe seria vago d+).
Já a classe diretor seria razoávelmente correto presumir que a mesma seja concreta.(em resumo classes genéricas d+ devem ser abstratas).

Métodos só devem ser abstratos quando não ha nenhum padrão nas ações de um grupo de classes relacionadas.

ex: Secretaria, Coordenador e DiretorExecutivo (todas estendem a classe Funcionario)
digamos que todos são funcionários autenticados, mas cada um tem uma forma distinta de autenticação.
nesse caso cada classe deve implementar o método de autenticação.

Espero que tenha ajudado :smiley:

esta tudinho explicito :slight_smile: .
para acrescentar uma classe abstrata pode extender um classe abstrata sem implementar o codigo dos metodos abstratos.

Sim, quando vc criar uma classe abstrata, seus metodos tecnicamente não tem “corpo”

caso uma outra classe abstrata extender uma classe abstrata, ela não precisa implementar esses metodos.

somenta a primeira classe concreta é obrigada a implementar os metodos abstratos.

é claro, uma classe abstrata pode ou não ter metodos abstratos, porém uma classe com pelo menos 1 metodo abstrato tem que ser obrigatoriamente abstrata.

e outro fato é que classes abstratas não podem ser instaciadas

[quote=danRabbit]Sim, quando vc criar uma classe abstrata, seus metodos tecnicamente não tem “corpo”

caso uma outra classe abstrata extender uma classe abstrata, ela não precisa implementar esses metodos.

somenta a primeira classe concreta é obrigada a implementar os metodos abstratos.

é claro, uma classe abstrata pode ou não ter metodos abstratos, porém uma classe com pelo menos 1 metodo abstrato tem que ser obrigatoriamente abstrata.

e outro fato é que classes abstratas não podem ser instaciadas[/quote]

Exatamente…agora como lição de casa descrubra quando usar Interfaces e quando usar classes abstratas.

[quote=Rocklee6544]Métodos abstratos são métodos sem corpo, nesse caso vc tem apenas a assinatura do método.
ex:

abstract public void autenticaFuncionario();

Quando um método é abstrato a classe que contiver o mesmo obrigatoriamente deve ser abstrata. :twisted:
ex:

abstract class Funcionario{
 String nome;
 int idade;

  abstract public void autenticaFuncionario();
}

A classe abstrata pode conter métodos concretos com corpo(ou seja com algum código entre as tags de abertura/{ e fechamente/} também chamado de bloco), além
de poder ter métodos sem corpo ou mais conhecido como métodos abstratos. :evil:
ex:

abstract class Funcionario{
String nome;
int idade;
double sal;

abstract public void autenticaFuncionario(); //este método contém apenas a assinatura 

public double calcBoneficacao(double sal){ 

/* já este contém uma codificação, mesmo que este não tenha nada entre as chaves de abertura e fechamento ainda será um método concreto*/
this.sal=sal *1.20;
}

}[/code]

Outra regra importante é que a classe que esteder uma classe com método abstrato deve implementa-lo. :twisted:

[code]public class Diretor extends Funcionario{

public void autenticaFuncionario(){
/* A classe mãe(Funcionario) passa a responsabilida da implementação do método( autenticaFuncionario(){} )para classe filha(Diretor), se a classe filha quiser passar a resposabilidade para outra classe a mesma também deve ser abstrata , independente disso a primeira classe que for concreta deve implementar todos os métodos abstratos de todas as classes anteriores. */

}

}[/code]

como regra final vc deve saber que classes abstratas não podem e nem devem ser instaciadas ou seja não podemos dar new nelas. :twisted:

O próprio compilador bloquea esta ação, vale ressaltar que classes abstratas existem para uma única finalidade servir como exemplo/classe modelo, afinal não faz
sentido instanciar um objeto funcionário.( o que esse objeto faz?quanto ganha?qual é seu cargo? percebe que o objeto dessa classe seria vago d+).
Já a classe diretor seria razoávelmente correto presumir que a mesma seja concreta.(em resumo classes genéricas d+ devem ser abstratas).

Métodos só devem ser abstratos quando não ha nenhum padrão nas ações de um grupo de classes relacionadas.

ex: Secretaria, Coordenador e DiretorExecutivo (todas estendem a classe Funcionario)
digamos que todos são funcionários autenticados, mas cada um tem uma forma distinta de autenticação.
nesse caso cada classe deve implementar o método de autenticação.

Espero que tenha ajudado :smiley:

[/quote]
Ótima explicação. E lembrando que interfaces só podem ter métodos abstratos. :smiley: