Tipo abstrato como parâmetro

Olá!
Eu tenho quatro classes: Torre, CPU, Periféricos e Computador. A classe Computador faz a seguinte chamada de método montaComputador(Monitor m, Torre t, Periferico mse, Periferico tecl). Como funciona a chamada desse método? Como devo proceder para utilizá-la no main?

[code]class Computador
{
Monitor monitor;
Torre torre;
Periferico mouse;
Periferico teclado;
double desc = 0;

void montaComputador(Monitor m, Torre t, Periferico mse, Periferico tecl)
{
monitor = m;
torre = t;
mouse = mse;
teclado = tecl;
}

double calculaPreco()
{
if (desc > 100)
desc = 100;
double precoBruto = monitor.obtemPreco() + torre.obtemPreco() + mouse.obtemPreco() + teclado.obtemPreco();
return ((100-desc)/100)*precoBruto ;
}

void compra(int quantidade)
{
desc += quantidade/10; // desc = desc + quantidade/10;
}

}[/code]

Obs.: As outras classes possuem apenas métodos set/get (obtem/altera Preco).

Computador c = new Computador(); Monitor m = new Monitor(); Torre t = new Torre(); Periferico p1 = new Periferico(); Periferico p2 = new Periferico(); c.montaComputador(m, t, p1, p2);

Obrigado! :slight_smile:

Opa,
Tente algo assim:

public class ComputadorMain {
       public static void main(String args[]) {
                Computador comp = new Computador();
                Monitor m = new Monitor();
                Torre t = new Torre();
                Periferico pMouse = new Periferico();
                Periferico pTeclado = new Periferico();
                

                //Aqui você seta os valores nos objetos
                //Ex. comp.setAlgumaCoisa(valor);

                comp.montaComputador(m, t, pMouse, pTeclado);
       }
}

Mas eu faria uma alteração. Como sua classe Periferico é para ser genérica e pode haver uma lista dela para cada computador, você poderia fazer assim:


class Computador 
{
  Monitor monitor;
  Torre torre;
  List<Periferico> perifericos;
  double desc = 0;
  
  void montaComputador(Monitor monitor, Torre torre, List<Periferico> perifericos) {
    this.monitor = monitor ;
    this.torre = torre;
    this.perifericos = perifericos;
  }
  
  double calculaPreco()
  {
    if (desc > 100) 
      desc = 100;
      double precoBruto =  monitor.obtemPreco() + torre.obtemPreco();
      //Pega o preco de todos os perifericos:
      if(perifericos != null) {
            for(int i = 0; i < perifericos.size(); i++) {
                Periferico p = perifericos.get(i);
                precoBruto += p.obtemPreco();
            }
      }
      return ((100-desc)/100)*precoBruto ;
  }
  
  void compra(int quantidade)
  {
    desc += quantidade/10; // desc = desc + quantidade/10;
  }
  
}

E no main você criaria assim:

public class ComputadorMain {
       public static void main(String args[]) {
                Computador comp = new Computador();
                Monitor m = new Monitor();
                Torre t = new Torre();
                List<Periferico> listaPerifericos = new ArrayList<Periferico>();
                
                Periferico mouse = new Periferico();
                Periferico teclado= new Periferico();
                Periferico caixaSom= new Periferico();

                listaPerifericos.add(mouse);
                listaPerifericos.add(teclado);
                listaPerifericos.add(caixaSom);
                

                //Aqui você seta os valores nos objetos
                //Ex. comp.setAlgumaCoisa(valor);

                comp.montaComputador(m, t, listaPerifericos );
       }
}    
       

[]´s

Daniel

Uma sugestão para o uso da classe Computador ficar mais prático: por que não colocar estes parâmetros no construtor? Ficaria assim:

[code]public Computador(Monitor m, Torre t, Periferico mse, Periferico tecl) {
montaComputador(m, t, mse, tecl);
}

public Computador() {
this(null, null, null, null);
}

void montaComputador(Monitor m, Torre t, Periferico mse, Periferico tecl) {
monitor = m;
torre = t;
mouse = mse;
teclado = tecl;
}
[/code]

Ou como alternativa usar o padrão Builder:

[code]Periferico mouse = new Periferico();
Periferico teclado = new Periferico();

Computador c = new ComputadorBuilder()
.setMonitor(new Monitor())
.setTorre(new Torre())
.setPerifericos(mouse, teclado) // Varargs
.build();[/code]