【发布时间】:2023-03-23 18:32:01
【问题描述】:
我从来没有经历过。
我有一堂课Loja。 Loja 有各种子类。
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);
}
}
calcularRendaAPagar是rentToPay()
我使用这种没有抽象修饰符的方法来使用多态性,因为每个子类都至少具有这种结构。但是,当我添加另一种方法时,例如
public double allExpenses(){
return calcularRendaAPagar();
}
或者...
public double allExpenses(){
return 0;
}
没有一个不是抽象的子类,“问”fo
【问题讨论】:
-
具体的子类必须实现任何抽象方法,但它们不必实现非抽象方法(因为它们已经在抽象类中实现了)。
-
你应该检查一下什么是真正的抽象方法。
-
问题中的代码存在基本的语法和结构问题。你错过了第一行的
class这个词,abstract方法不能有方法体。请使用您的实际代码的minimal reproducible example 更新问题,我们无法为您提供零碎、不完整和/或不正确的信息。 -
“没有一个子类要求这个 allExpenses()” 他们为什么会这样呢?它由超类提供。 (并且该陈述与您的问题标题所说的相反。)再次,请使用 MCVE 更新问题,证明该问题没有基本语法错误。
-
那么我怎样才能强制每个子类都有这个方法呢?
标签: java class inheritance methods polymorphism