我是Java编程的初学者,明天我有一个测试,但仍然不了解抽象类,因为每个人都给我无尽的错误,我读过书并搜索过互联网,但我感到非常失望和我一起。
嗯,这是我最近的演习:应该对周年纪念日表示祝贺!
这是抽象基类
abstract class Pessoa
{
private int dia, mes, ano;
Pessoa (int dia, int mes, int ano)
{
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
public void setDia(int dia){ this.dia = dia;}
public void setMes(int mes){ this.mes = mes;}
public void setAno(int ano){ this.ano = ano;}
public int getDia(){return dia;}
public int getMes(){ return mes;}
public int getAno(){ return ano;}
abstract int aniversario();
}
,这是继承方法
的派生类import java.util.Date;
class Cliente extends Pessoa
{
int aniversario()
{
int d = data.get(Calendar.DAY_OF_MONTH);
int m = data.get(Calendar.MONTH);
if ( d== dia && m == mes)
return "Parabéns pelo seu aniversário! ";
}
}
,错误是:
constructor Pessoa in class Pessoa cannot be applied to given types;
required: java.lang.String,int,java.lang.String,int,int,int
found: no arguments
reason: actual and formal argument lists differ in length
the operator that you use cannot be used for the
type of value you are using it for. You are either
using the wrong type here, or the wrong operator.
也许显而易见,但我看不到!
(拜托,对不起英语不好)
答案 0 :(得分:2)
Pessoa
中没有不带参数的默认构造函数。如果没有显式调用,则每个子类都隐式调用默认构造函数(没有参数)。但是Cliente
中没有这样的显式调用,如果没有Java,则Java无法调用默认的超类构造函数。
在Cliente
中添加一个显式调用Pessoa
中的超类构造函数的构造函数。
public Cliente(int dia, int mes, int ano)
{
super(dia, mes, ano);
}
类的构造函数发生了这个问题;它与Pessoa
abstract
无关。
答案 1 :(得分:0)
您需要显式调用超类的构造函数
class Cliente extends Pessoa
{
Cliente(int dia, int mes, int ano) {
super(dia, mes, ano);
}
int aniversario()
{
int d = data.get(Calendar.DAY_OF_MONTH);
int m = data.get(Calendar.MONTH);
if ( d== dia && m == mes)
return "Parabéns pelo seu aniversário! ";
}
}