Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Doce

Criei umas classes para saber se entendi bem. O abstrato serve para indicar algo que não está bem especificado, como por exemplo a classe "Doce" que eu criei, porque doce é muito vago, tendo em vista que existem vários. Correto? Meus códigos logo abaixo:

package doceria;

public abstract class Doce {

    private String nome;
    private Float preco;
    private Float peso;
    private Float altura;

    public void venda(Doce dc) {
        System.out.println(" Foi vendido o doce " + dc.getNome() + " \n por R$ " + dc.getPreco() + " \n pesando " + dc.getPeso() + " gramas \n altura de " + dc.getAltura() + " cm");
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public Float getPreco() {
        return preco;
    }

    public void setPreco(Float preco) {
        this.preco = preco;
    }

    public Float getPeso() {
        return peso;
    }

    public void setPeso(Float peso) {
        this.peso = peso;
    }

    public Float getAltura() {
        return altura;
    }

    public void setAltura(Float altura) {
        this.altura = altura;
    }
}
package doceria;

public class BombaChocolate extends Doce{

    public static void main(String[] args) {

        Doce dc = new BombaChocolate();
        dc.setNome("Bomba de Chocolate");
        dc.setPeso(200f);
        dc.setAltura(8f);
        dc.setPreco(10.00f);

        dc.venda(dc);
    }
}
3 respostas
solução!

Uma classe abstrata define o comportamento esperado que suas classes filhas devam ter, no entanto, ela não define o "como" esse comportamento será atendido.

Por exemplo:

public abstract class Carro {

       protected int velocidade = 0;

       public abstract void acelerar();

}

public class CarroDePasseio extends Carro {

      public void acelerar(){
          // comportamento de aceleração de um carro de passeio
          this.velocidade+=5;
      }

}

public class CarroDeCorrida extends Carro {

      public void acelerar(){
          // comportamento de aceleração de um carro de corrida
          this.velocidade+=10
      }

}

Então não é que ela não esteja bem definida, na verdade a classe abstrata define, porém não implementa.

Além disto, como é uma classe abstrata ela não pode ser instanciada, ou seja, não é possível fazer um new Carro().

Acho que entendi. Ela serve para repetir os métodos da classe mãe para as filhas, assim podendo fazer alterações nas repetições dos métodos? E o meu trecho de código tá errado também?

package doceria;

public class BombaChocolate extends Doce{

    public static void main(String[] args) {

        Doce dc = new BombaChocolate();
        dc.setNome("Bomba de Chocolate");
        dc.setPeso(200f);
        dc.setAltura(8f);
        dc.setPreco(10.00f);

        dc.venda(dc);
    }
}

Desde já agradeço a ajuda.

Fiz alterações nas classes e criei outras, agora acredito que esteja correto.

package doce;

public abstract class Doce {

    private String nome;
    private String marca;
    private Float preco;
    private Float peso;

    public abstract void getVenda();

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getMarca() {
        return marca;
    }

    public void setMarca(String marca) {
        this.marca = marca;
    }

    public Float getPreco() {
        return preco;
    }

    public void setPreco(Float preco) {
        this.preco = preco;
    }

    public Float getPeso() {
        return peso;
    }

    public void setPeso(Float peso) {
        this.peso = peso;
    }
}
package doce;

public class Brigadeiro extends Doce{

    private int unidade;

    public void getVenda() {
        unidade--;
        System.out.println("Foi vendido um brigadeiro");
        System.out.println("Agora sobram " + unidade + " de brigadeiros");
    }

    public int getUnidade() {
        return unidade;
    }

    public void setUnidade(int unidade) {
        this.unidade = unidade;
    }
}
package doce;

public class Beijinho extends Doce{

    private int unidade;

    public void getVenda() {
        unidade--;
        System.out.println("Foi vendido um beijinho");
        System.out.println("Agora sobram " + unidade + " de beijinhos");
    }

    public int getUnidade() {
        return unidade;
    }

    public void setUnidade(int unidade) {
        this.unidade = unidade;
    }
}
package doce;

public class TestaReferencias {

    public static void main(String[] args) {

        Brigadeiro bg = new Brigadeiro();
        bg.setNome("Brigadeiro");
        bg.setMarca("Cacau Brasil");
        bg.setPeso(10f);
        bg.setPreco(8f);
        bg.setUnidade(30);

        bg.getVenda();
        bg.getVenda();
        bg.getVenda();

        System.out.println();

        Beijinho bj = new Beijinho();
        bj.setNome("Beijinho");
        bj.setMarca("Cacau Brasil");
        bj.setPeso(20f);
        bj.setPreco(12f);
        bj.setUnidade(40);

        bj.getVenda();
        bj.getVenda();
        bj.getVenda();
    }
}