Olá!!
Eu estou com uma dúvida com relação a um acesso do código abaixo.
abstract class Midia {
protected String titulo;
public String getTitulo(){return titulo;}
public void setTitulo(String v){titulo=v;}
public abstract Midia clone();
}
class Video extends Midia{
private String produtora;
private String diretor;
public String getProdutora(){return produtora;}
public void setProdutora(String v){produtora=v;}
public String getDiretor(){return diretor;}
public void setDiretor(String v){diretor=v;}
public Midia clone() {
Video v = new Video();
v.setTitulo(titulo);
v.setProdutora(produtora);
v.setDiretor(diretor);
return v;
}
}
class Jogo extends Midia{
private String fabricante;
private int console;
public String getFabricante(){return fabricante;}
public void setFabricante(String v){fabricante=v;}
public int getConsole(){return console;}
public void setConsole(int v){console=v;}
public Midia clone() {
Jogo j = new Jogo();
j.setTitulo(titulo);
j.setFabricante(fabricante);
j.setConsole(console);
return j;
}
}
class Musical extends Midia{
private String autor;
private String produtora;
public String getAutor(){return autor;}
public void setAutor(String v){autor=v;}
public String getProdutora(){return produtora;}
public void setProdutora(String v){produtora=v;}
public Midia clone() {
Musical m = new Musical();
m.setTitulo(titulo);
m.setAutor(autor);
m.setProdutora(produtora);
return m;
}
}
class Conserto {
private Midia midia;
public Midia getMidia(){return midia;}
public void setMidia(Midia v){midia=v.clone();}
}
Esse é um exemplo simples do uso do padrão de projeto “Protótipo”.
A questão está na linha:
public void setMidia(Midia v){midia=v.clone();}
A classe Concerto tem uma referência para a classe Midia.
Em setMidia, é passado um parâmetro do tipo Midia.
O método clone() é abstrato, e não estático (static). Assim, não daria problema no código abaixo?
midia = v.clone()
Para mim, deu NullPointerException.