This is the first time I've had this error.
I have the% class Loja
that extends into several subclasses. problem is that subclasses do not "request" the super method
Shop:
public abstract class Loja {
/**
* Corresponde ao valor da area da loja
*/
private double area;
/**
* Nome da loja
*/
private String nome;
/**
* Valor da renda fixa atribuida a todas as lojas
*/
private static double rendaFixa = 200;
/**
* Área por omissão das lojas
*/
private static final double AREA_POR_OMISSAO = 0;
/**
* Nome por omissão das lojas
*/
private static final String NOME_POR_OMISSAO = "sem nome";
/**
* clasificação inferior por omissão dda loja
*/
private static final int CLASSIFICACAO_INFERIOR = 20;
/**
* Classificação superior por omissão da loja
*/
private static final int CLASSIFICACAO_SUPERIOR = 100;
/**
* dividendo da àrea para calcular a renda a pagar
*/
private static final int DIVIDENDO_DE_AREA = 100;
/**
* Classificação da loja
*/
enum Classificacao {
/**
* classificação pequena
*/
pequena(),
/**
* classificação média
*/
media(),
/**
* classificação grande
*/
grande();
}
/**
* Instância uma instância Loja recebendo como parametro um double area e
* uma String nome
*
* @param area Área da loja
* @param nome Nome da loja
*/
public Loja(double area, String nome) {
setArea(area);
setNome(nome);
}
/**
* construtor copia que leva como parametro ums instâncoa de Loja copiando
* os atributos dessa instância para uma nova instância de Loja(area, nome)
*
* @param loja loja que servirá para clonar os atributos para construir uma
* nova loja.
*/
public Loja(Loja loja) {
setArea(loja.getArea());
setNome(loja.getNome());
}
/**
* Construtor que não recebe parâmetros logo usa o valor por omissão
*/
public Loja() {
setArea(AREA_POR_OMISSAO);
setNome(NOME_POR_OMISSAO);
}
/**
* Método que retorna o valor da área
*
* @return area da loja
*/
public double getArea() {
return area;
}
/**
* método qeu retorna o nome da loja
*
* @return Nome da loja
*/
public String getNome() {
return nome;
}
/**
* Método que retorna o valor da renda fixa da loja
*
* @return valor da renda fixa
*/
public double getRendaFixa() {
return rendaFixa;
}
/**
* Método que retorna a classificação da loja
*
* @return classificação da loja
*/
public Classificacao getClassificacao() {
if (area < CLASSIFICACAO_INFERIOR) {
return Classificacao.pequena;
} else if (area > CLASSIFICACAO_SUPERIOR) {
return Classificacao.grande;
}
return Classificacao.media;
}
/**
* Método que permite a alteração do valor da área
*
* lança uma excessão do tipo IllegalArguemntException caso a area seja
* invalida ou seja: area menor que a area minima de loja(<5>)
*
* @param area Área da loja
*/
public void setArea(double area) {
this.area = area;
}
/**
* Método que permite alteração do nome da loja
*
* @param nome Nome da loja
*/
public void setNome(String nome) {
this.nome = nome;
}
/**
* Método toString que imprime na consola os atributos da loja
*
* @return String com valores da loja
*/
@Override
public String toString() {
return String.format("Nome da loja: %s%nArea da loja: %f Renda Fixa: %f €%n",
area, rendaFixa, nome);
}
/**
* Método que calcula a arenda a pagar pela loja
*
* Para ser especificado nas subclasses
*
* não usado polimorfismo na classe Quiosque porque classe têm o seu próprio
* valor de renda a pagar
*
* @return valor da renda a pagar pela loja
*/
public double calcularRendaAPagar() {
return rendaFixa * (1 + area / DIVIDENDO_DE_AREA);
}
has subclass CommonStore and Ancora:
public abstract class LojaComum extends Loja {
/**
* quantidade de funcionários de qualquer entidade de LojaComum
*/
private int qtdFuncionarios;
/**
* número de instâncias criadas de qualquer LojaComum, quer seja Restauracao
* ou Quiosque
*/
private static int nInstancias = 0;
/**
* quantidade de funcionários de uma entidade de LojaComum por omissão
*/
private static final int QTD_FUNCIONARIOS_POR_OMISSAO = 0;
/**
* Cria uma instância de Lojacomum recebendo como parametro a area,
* rendaFixa e qtdFuncionários
*
* incrementa nInstâncias em +1
*
* @param area Area da Loja comum
* @param qtdFuncionarios quantidade de funcionários da loja Comum
* @param nome o nome da lojaComum
*/
public LojaComum(int qtdFuncionarios, double area, String nome) {
super(area, nome);
setQtdFuncionarios(qtdFuncionarios);
nInstancias++;
}
/**
* Consturtor copia que cria uma instância de Lojacomum recebendo uma
* LojaComum como parametro
*
* Cria um novo Objeto com a area, nome e qtdFuncionários do objeto
* Lojacomum para a nova instãncia
*
* incrementa nInstâncias em +1
*
*/
public LojaComum(LojaComum lojaComum) {
setArea(lojaComum.getArea());
setNome(lojaComum.getNome());
setQtdFuncionarios(lojaComum.getQtdFuncionarios());
nInstancias++;
}
/**
* Cria uma instância de LojaComum com o nome e area por omissão da super
* criando também quantidade de funcionãrios por omissão
*
* incrementa nInstâncias em +1
*/
public LojaComum() {
super();
qtdFuncionarios = QTD_FUNCIONARIOS_POR_OMISSAO;
nInstancias++;
}
/**
* retorna a quantidade de funcionários duma Loja comum
*
* @return quantidade de funcionários
*/
public int getQtdFuncionarios() {
return qtdFuncionarios;
}
/**
* permite obter o número de isntancias criadas
*
* @return número de instâncias criadas
*/
public static int getnInstancias() {
return nInstancias;
}
/**
* define a quantidade de funcionários duma lojaComum
*
* @param qtdFuncionarios quantidade de funcionários
*/
public void setQtdFuncionarios(int qtdFuncionarios) {
this.qtdFuncionarios = qtdFuncionarios;
}
/**
* retorna uma String com atributos de LojaComum
*
* @return String com atributos de LojaComum
*/
@Override
public String toString() {
return "LojaComum{" + "qtdFuncionarios=" + qtdFuncionarios + '}';
}
}
anchor store:
public abstract class LojaAncora extends Loja implements Seguranca {
/**
* Custo de segurança de cada loja
*/
private double custoSeguranca;
/**
* Número de instâncias criadas
*/
private static int nInstancias = 0;
/**
* Valor por omissão do custo de segurança de cada loja
*/
private static final double CUSTO_SEGURANCA_POR_OMISSAO = 0;
/**
* Construtor que recebe como parâmetro, além do da super classe, o custo de
* segurança da loja; inclui contador do número de instâncias de lojas
* âncora
*
* incrementa nInstâncias em +1
*
* @param area a area da loja ancora
* @param nome o nome a loja an cora
* @param custoSeguranca o custo de segurança da loja ancora
*/
public LojaAncora(double area, String nome, double custoSeguranca) {
super(area, nome);
setCustoSeguranca(custoSeguranca);
nInstancias++;
}
/**
* construtor copia que instância LojaAncora apartir de outra instância de
* LojaAncora
*
* definindo a area, nome e custo de seguranca da LojaAncora que vai ser
* copiada
*
* incrementa nInstâncias em +1
*
* @param lojaAncora instância de lojaAncora que servirá como parametro
*/
public LojaAncora(LojaAncora lojaAncora) {
setArea(lojaAncora.getArea());
setNome(lojaAncora.getNome());
setCustoSeguranca(lojaAncora.getCustoSeguranca());
nInstancias++;
}
/**
* instância LojaAncora com a area e nome por omissão da classe Loja
* @see Loja
*
* define o custo de seguranca por omissao
*
* incrementa nInstancias por 1
*
*/
public LojaAncora() {
super();
setCustoSeguranca(CUSTO_SEGURANCA_POR_OMISSAO);
nInstancias++;
}
/**
* Método que retorna o custo de segurança da loja
*
* @return custo de segurança da loja
*/
public double getCustoSeguranca() {
return this.custoSeguranca;
}
/**
* Método que retorna o número de instâncias de lojas âncora
*
* @return número de instâncias criadas
*/
public static int getNInstancias() {
return nInstancias;
}
/**
* Método que permite alterar o custo de segurança da loja
*
* @param custoSeguranca
*/
public void setCustoSeguranca(double custoSeguranca) {
this.custoSeguranca = custoSeguranca;
}
/**
* Método que cria uma string com as características da loja
*
* @return além das caracteristicas que imprime o método toString da super
* classe, retorna também o custo de segurança
*/
@Override
public String toString() {
return String.format("%sCusto de Segurança: %f €%n ", super.toString(),
this.custoSeguranca);
}
}
Own:
public class Restauracao extends LojaComum implements Seguranca {
/**
* custo da manutenção do restaurante
*/
private double custoManutencao;
/**
* recceitas anuais do restaurante
*/
private double receitasAnuais;
/**
* Custo de segurança da Loja Restauracao
*/
private double custoSeguranca;
/**
* quantidade de mesas do restaurante
*/
private int qtdMesas;
/**
* custo de manutenção por omissão do restaurante
*/
private static final double CUSTO_MANUTENCAO_POR_OMISSAO = 0;
/**
* receitas anuais por omissão do restaurante
*/
private static final double RECEITAS_ANUAIS_POR_OMISSAO = 0;
/**
* quantidade de mesas do restaurante por omissão
*/
private static final int QTD_MESAS_POR_OMISSAO = 0;
/**
* dividendo das receitas anuais para calcular a renda a pagar
*/
private static final int DIVIDENDO_DE_RECEITAS = 100;
/**
* custo por mesa a pagar na segurança
*/
private static final int CUSTO_POR_MESA = 10;
/**
* cria uma instância de Restaurante recebendo como parametro o custo da
* manutenção, receitas anuais e a quantidade de mesas
*
* incrementa por +1 o valor de nInstancias em LojaComum
*
* @see LojaComum
*
* @param custoManutencao o custo da manutenção do restaurante
* @param receitasAnuais as receitas anuais do restaurante
* @param qtdMesas a quantidade de mesas do restaurante
* @param area a area do restaurante
* @param qtdFuncionarios a quantidade de funcionários do restaurante
*/
public Restauracao(double custoManutencao, double receitasAnuais, int qtdMesas,
double area, String nome, int qtdFuncionarios, double custoSeguranca) {
super(qtdFuncionarios, area, nome);
setCustoManutencao(custoManutencao);
setReceitasAnuais(receitasAnuais);
setReceitasAnuais(receitasAnuais);
setQtdMesas(qtdMesas);
}
/**
* instância uma nova loja Restauracao copiando os atributos do objeto copia
* Restauracao
*
* definindo apartir do objeto copia restauracao o custo de manutencao,
* receitas anuais, quantidade de mesas, area, nome, quantidade de
* funcionarios e custo de seguranca
*
* incrementa por +1 o valor de nInstancias em LojaComum
*
* @see LojaComum
*
* @param restaurante Restaurante que servirá como cópia para a nova
* instância
*/
public Restauracao(Restauracao restaurante) {
setCustoManutencao(restaurante.getCustoManutencao());
setReceitasAnuais(restaurante.getReceitasAnuais());
setQtdMesas(restaurante.getQtdMesas());
setArea(restaurante.getArea());
setNome(restaurante.getNome());
setQtdFuncionarios(restaurante.getQtdFuncionarios());
setCustoSeguranca(restaurante.getCustoSeguranca());
}
/**
* cria uma instância de restaurante com os valores por omissão
*
*/
public Restauracao() {
super();
custoManutencao = CUSTO_MANUTENCAO_POR_OMISSAO;
receitasAnuais = RECEITAS_ANUAIS_POR_OMISSAO;
qtdMesas = QTD_MESAS_POR_OMISSAO;
}
/**
* devolve o custo de manutencao do restaurante
*
* @return custo de manutencao do restaurante
*/
public double getCustoManutencao() {
return custoManutencao;
}
/**
* devolve receitas anuais do restaurante
*
* @return receitas anuais do restaurante
*/
public double getReceitasAnuais() {
return receitasAnuais;
}
/**
* devolve o custo de seguranca do restaurante
*
* @return custo de seguranca do restaurante
*/
public double getCustoSeguranca() {
return custoSeguranca;
}
/**
* devolve a quantidade de mesas do restaurante
*
* @return a quantidade de mesad do restaurante
*/
public int getQtdMesas() {
return qtdMesas;
}
/**
* define o custo de manutencao do restaurante
*
* @param custoManutencao custo de manutencao do restaurante
*/
public void setCustoManutencao(double custoManutencao) {
this.custoManutencao = custoManutencao;
}
/**
* defien as recitas nuais do restaurante
*
* @param receitasAnuais receitas anuais do restaurante
*/
public void setReceitasAnuais(double receitasAnuais) {
this.receitasAnuais = receitasAnuais;
}
/**
* define o custo de seguranca do restaurante
*
* @param custoSeguranca custo de seguranca do do restaurante
*/
public void setCustoSeguranca(double custoSeguranca) {
this.custoSeguranca = custoSeguranca;
}
/**
* define a quantidade de mesas do restaurante
*
* @param qtdMesas quantidade de mesas do restaurante
*/
public void setQtdMesas(int qtdMesas) {
this.qtdMesas = qtdMesas;
}
/**
* Devolve uma String com atributos de restauracao
*
* @return String com atributos de restaruacao
*/
@Override
public String toString() {
return "Restauracao{" + "custoManutencao=" + custoManutencao
+ ", receitasAnuais=" + receitasAnuais + ", qtdMesas="
+ qtdMesas + '}';
}
/**
* calcula a renda a pagar pelo restaurante
*
* @return um valor, double, a pagar pelo restaurante
*/
@Override
public double calcularRendaAPagar() {
return super.calcularRendaAPagar()
+ (receitasAnuais / DIVIDENDO_DE_RECEITAS);
}
/**
* retorna o custo da segurança a pagar a empresa
*
* @return custo da segurança a pagar a empresa
*/
@Override
public double calcularCustoSeguranca() {
return custoSeguranca * CUSTO_POR_MESA * qtdMesas;
}
}
Kiosk:
public class Quiosque extends LojaComum {
/**
* A renda dum quiosque que é igual para todas as instância de Quiosque
*/
private static double renda = 200;
/**
* Cria uma instância de Quiosque recebendo como parametro a àrea, renda
* fixa e a quantidade de funcionários
*
* @param area A área do quiosque
* @param qtdFuncionarios
*/
public Quiosque(int qtdFuncionarios, double area, String nome) {
super(qtdFuncionarios, area, nome);
}
/**
* Instância Quiosque com area, nome e quantidade de funcionarios por
* omissao
*
*/
public Quiosque() {
super();
}
/**
* Cria uma String com os atributos de Quiosque
*
* @return String com atributos de Quiosque
*/
@Override
public String toString() {
return "Quiosque{" + '}';
}
/**
* Método que calcula a renda a pagar
*
* @return renda a pagar pelo quiosque
*/
@Override
public double calcularRendaAPagar() {
return renda;
}
}
these two classes are subclasses of LojaComum
the next ones are subclasses of LojaAncora:
public class Propria extends LojaAncora {
/**
* Número de instâncias criadas Iniciado a 0
*/
private static int nInstancias = 0;
/**
* Construtor igual ao implementado na classe LojaAncora; inclui contador do
* número de instâncias de lojas âncora próprias
*
* incrementa nInstancias por +1
*
* @param area a area da loja Ancoa propria
* @param nome o nome da Loja Ancora propria
* @param custoSeguranca o custo de segurânça da loja ancora proprai
*/
public Propria(double area, String nome, double custoSeguranca) {
super(area, nome, custoSeguranca);
nInstancias++;
}
/**
* Construtor copia que recebe uma loja Propria, propria
*
* define a area, nome e custo de seguranca da instância propria que que
* servirá como copia para a nova instância
*
*
* incrementa nInstancias por +1
*
* @param propria Loja Propria que serve como cópia para a nova instâcia de
* Propria
*
*/
public Propria(Propria propria) {
setArea(propria.getArea());
setNome(propria.getNome());
setCustoSeguranca(propria.getCustoSeguranca());
nInstancias++;
}
/**
* Construtor que insancia Propria com a area, e nome por omissão da Loja e
* custo de seguranca por omissão
*
* incrementa nInstancias por +1
*
*/
public Propria() {
super();
nInstancias++;
}
/**
* Método que retorna o número de instâncias de lojas âncora próprias
*
* @return número de instâncias criadas
*/
public static int getNInstancias() {
return nInstancias;
}
/**
* Método que cria uma string com as características da loja
*
* @return além das características que o método toString da super classe
* imprime, também retorna o valor da renda
*/
@Override
public String toString() {
return String.format("%sRenda: %f €%n", super.toString(),
getRendaFixa());
}
/**
* devolveo custo de seguranca a pagar ao Centro comercial
*
* @return custo de seguranca
*/
@Override
public double calcularCustoSeguranca() {
return getCustoSeguranca();
}
}
e:
public class Externa extends LojaAncora {
/**
* Quantidade de funcionários da loja
*/
private int qtdFuncionarios;
/**
* Valor de receitasAnuais do ano anterior
*/
private double receitasAnuais;
/**
* Desconto em percentagem da renda
*/
private double desconto;
/**
* Número de instâncias criadas (neste contexto corresponde ao números de
* lojas âncora externas criadas
*/
private static int nInstancias = 0;
/**
*
*/
private static final double DESCONTO_POR_OMISSAO = 0;
/**
* Valores das constantes de funcionários por omissão, valor das
* receitasAnuais anuais por omissão, dividendo de area e dividendo de
* receitasAnuais
*/
private static final int DIVIDENDO_DE_RECEITAS_ANUAIS = 100;
private static final int QTD_FUNCIONARIOS_POR_OMISSAO = 0;
private static final int RECEITAS_POR_OMISSAO = 0;
/**
* Construtor que recebe como parâmetros, além dos da super classe, a
* quantidade de funcionários e o valor das receitasAnuais anuais
*
* @param area
* @param custoSeguranca
* @param qtdFuncionarios
* @param receitasAnuais
* @param desconto
*/
public Externa(double area, String nome, double custoSeguranca,
int qtdFuncionarios, double receitasAnuais, double desconto) {
super(area, nome, custoSeguranca);
setQuantidadeFuncionarios(qtdFuncionarios);
setReceitas(receitasAnuais);
setDesconto(desconto);
nInstancias++;
}
/**
* Construtot que não recebe nenhum parâmetro e usa os valores das
* constantes por omissão
*/
public Externa() {
super();
qtdFuncionarios = QTD_FUNCIONARIOS_POR_OMISSAO;
receitasAnuais = RECEITAS_POR_OMISSAO;
desconto = DESCONTO_POR_OMISSAO;
nInstancias++;
}
/**
* Método que retorna a quantidade de funcionários da loja
*
* @return quantidade de funcionários da loja
*/
public int getQuantidadeFuncionarios() {
return qtdFuncionarios;
}
/**
* Método que retorna o valor das receitasAnuais do ano anterior
*
* @return valor das receitasAnuais do ano anterior
*/
public double getReceitas() {
return receitasAnuais;
}
public double getDesconto() {
return desconto;
}
/**
* Método para obter o número de instâncias
*
* @return número de instâncias criadas
*/
public static int getNInstancias() {
return nInstancias;
}
/**
* Método que permite alterar a quantidade de funcionários
*
* @param qtdFuncionarios
*/
public void setQuantidadeFuncionarios(int qtdFuncionarios) {
this.qtdFuncionarios = qtdFuncionarios;
}
/**
* Método que permitr alterar o valor das receitasAnuais
*
* @param receitasAnuais
*/
public void setReceitas(double receitasAnuais) {
this.receitasAnuais = receitasAnuais;
}
/**
* Define o Desconto da loja Ancora Externa
*
* @param desconto Desconto da LojaAncoraExterna
*/
public void setDesconto(double desconto) {
this.desconto = desconto;
}
/**
* Método que cria uma string com a quantidade de funcionários e o valor das
* receitasAnuais anuais
*
* @return quantidade de funcionários e receitasAnuais
*/
@Override
public String toString() {
return String.format("%sQuantidade de funcionários: %d Receitas Anuais: "
+ "%f €%n", super.toString(), this.qtdFuncionarios,
this.receitasAnuais);
}
/**
* Método para o cálculo da renda das lojas âncora externas
*
* @return o valor final da renda da loja
*/
@Override
public double calcularRendaAPagar() {
return super.calcularRendaAPagar()
+ (receitasAnuais / DIVIDENDO_DE_RECEITAS_ANUAIS);
}
/**
* devolve o custo da seguranca a pagar pela loja Externa
*
* @return custo da segurança a pagar pela loja externa
*/
@Override
public double calcularCustoSeguranca() {
return (1 - desconto) * getCustoSeguranca();
}
}
and the interface
public interface Seguranca {
/**
* método abstrato que calcula o custo de segurança a pagar ao centro
* comercial
*
* para ser implementado em:
*
* >LojasAncora >Restauracao
*
* @return O custo a pagar ao CentroComercial. Custo a pagar depende do
* número de mesas caso esta tenha
*/
double calcularCustoSeguranca();
}
I even tried to implement an interface
public interface ReceitasTotais {
/**
*
* @return
*/
double receitasTotais();
}
in Loja
and in another class CentroComercial that both have this method. but in no way do quiosque
, Restaurante
... classes "call" method receitasTotais()