Estudando e com duvidas!

Olá pessoal, estou estudando e gostaria de tirar algumas dúvidas.

Minha principal duvida é sobre diferenças entre o conceito de método abstrato e o método nãoabstrato (concreto)? E faz sentido eu definir um atributo como abstrato?

Quem puder me esclarecer, ficarei muito agradecido!

Métodos abstratos não possuem corpo…

Abstrato:

public abstract void meuMetodo();

Concreto:

public void meuMetodo() { System.out.println("Método concreto..."); }

T+

Ohhhhhh Diego, valeu pelo esclarecimento!!!

Mas ainda tenho uma dúvida, se faz sentido eu definir um atributo como abstrato? e pq?

Estou começando a estudar Java agora, por isso essas dúvidas tão básicas.

Valeu mesmo!

Um método abstrado não possui corpo e obrigatóriamente tem que ser implementado pela classe que extenda a classe onde ele foi declarado.

Por exemplo:

package guj;

public abstract class Conta {
    public Double saldo;
    
    public abstract void deposita(Double valor);
    
    public void getSaldo(){
        System.out.println("Classe Conta");
    }    
}


package guj;

public class ContaCorrente extends Conta {
    
    public void deposita(Double valor){
        saldo += valor * 0.97;
    }

    public void getSaldo(){
        System.out.println("Classe ContaCorrente");
    }



}

package guj;

public class ContaPoupança extends Conta {
    
 public void deposita(Double valor){
        saldo += valor;
    }    

}

O método abstrato deposita obrigatoriamente tem que ser implementando nas classes filhas de Conta.

Já o método concreto getSaldo, pode ser ou não redefinido nas classes filhas.

[]s

Atributos = variaveis na classe ?

Acho que o modificador abstract não pode ser usado para variaveis.

[]s

[quote=Zeed01]Atributos = variaveis na classe ?

Acho que o modificador abstract não pode ser usado para variaveis.

[]s[/quote]

Isso mesmo, variáveis não podem ser marcadas com o modificador abstract…

[quote=Zeed01]Um método abstrado não possui corpo e obrigatóriamente tem que ser implementado pela classe que extenda a classe onde ele foi declarado.

Por exemplo:

package guj;

public abstract class Conta {
    public Double saldo;
    
    public abstract void deposita(Double valor);
    
    public void getSaldo(){
        System.out.println("Classe Conta");
    }    
}


package guj;

public class ContaCorrente extends Conta {
    
    public void deposita(Double valor){
        saldo += valor * 0.97;
    }

    public void getSaldo(){
        System.out.println("Classe ContaCorrente");
    }



}

package guj;

public class ContaPoupança extends Conta {
    
 public void deposita(Double valor){
        saldo += valor;
    }    

}

O método abstrato deposita obrigatoriamente tem que ser implementando nas classes filhas de Conta.

Já o método concreto getSaldo, pode ser ou não redefinido nas classes filhas.

[]s

[/quote]

Zeed… sua afirmação não esta correta…

a PRIMEIRA classe CONCRETA derivada de conta será obrigada a fornecer uma implementação para os metodos abstratos.

Se uma classe extender Conta, mas também for abstrata, essa classe nao precisa implementar os metodos abstratos, pode passar isso pra frente. Mas a primeira classe concreta é obrigada a reescrever os abstratos.

Fábio,

É isso mesmo, a primeira classe concreta que tem a obrigação de implementar os métodos abstratos.

Perfeito Fábio…

Obrigado pela correção.

Então a afirmação correta seria:
“Um método abstrado não possui corpo e obrigatoriamente tem que ser implementado pela classe primeira classe concreta que extenda a classe onde ele foi declarado”

[]s