0

我是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.

也许很明显,但我看不到!(请,对不起英语不好)

4

2 回答 2

2

您没有不Pessoa带参数的默认构造函数。如果您不显式调用一个子类,则每个子类都会隐式调用默认构造函数(不带参数)。但是 in 中没有这样的显式调用Cliente,如果没有,Java 就无法调用默认的超类构造函数。

添加一个构造函数Cliente,显式调用Pessoa.

public Cliente(int dia, int mes, int ano)
{
    super(dia, mes, ano);
}

类的构造函数会出现此问题;Pessoa它与存在无关abstract

于 2013-11-13T17:13:57.677 回答
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! ";
    }
}
于 2013-11-13T17:15:06.857 回答