subclass does not incorporate super class method

0

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()

    
asked by anonymous 19.04.2018 / 22:52

1 answer

0

This is the default language behavior.

Note that obliging a subclass to call the super is considered an anti-default in some languages. This article by Martin Fowler talks about it and presents alternatives.

    
20.04.2018 / 20:51