Herança de Classes

Olá

Sou iniciante em java, descobri este forum pelo google e tem me ajudando bastante, no entanto estou com uma grande duvida, que suponho que seja bastante facil, no entanto não estou a conseguir concluir.

Ora tenho um exercicio Em que tenho que criar a Super Classe Pessoa, as sub classes Fornecedor, Empregado, Cliente e por final a classe teste.
Refere também que tenho que definir os metodos toString, clone e equals em cada classe.

Na super classe Pessoa tenho que criar as variaveis nome, contribuinte e idade, e tenho o feito desta forma.

public class Pessoa {
    
   private String nome;
   private long contribuinte;
   private byte idade;
   
   public Pessoa(String nome, long contribuinte, byte idade){
       this.nome=nome;
       this.contribuinte=contribuinte;
       this.idade=idade;
       
       
   }
   public String getNome(){
       return this.nome;
          }
   public long getContribuinte(){
       return this.contribuinte;
   }
   public byte getIdade(){
       return this.idade;
   }
   public void setNome(String n){
       this.nome=nome;
   }
   public void setContribuinte(long c){
       this.contribuinte=contribuinte;
   }
   public void setIdade(byte i){
       this.idade=idade;
   }

}

Depois na classe fornecedor as variaveis plafons e valorEmDivida e a instruçao obterSaldo(que nao estou a compreender muito bem)

public class Fornecedor extends Pessoa {
        private float plafond;
        private float valorEmDivida;
        
        
        public Fornecedor(String nome, long contribuinte, byte idade, float plafond, float valorEmDivida){
            super(nome, contribuinte, idade);
            this.plafond=plafond;
            this.valorEmDivida=valorEmDivida;
        
    }
        public float getPlafond(){
            return this.plafond;
        }
        public float getValorEmDivida(){
            return this.valorEmDivida;
        }
        public void setPlafond(float p){
            this.plafond=plafond;
        }
        public void setValorEmDivida(float ved){
            this.valorEmDivida=valorEmDivida;
        }
        public float obterSaldo(float saldof){
            return saldof=(plafond-valorEmDivida);
        }
        
        public boolean equals(Fornecedor f){
        return f.getNome()== super.getNome()&&f.getContribuinte()==super.getContribuinte()&& f.getIdade()==super.getIdade()&&f.getPlafond()==this.getPlafond()&&f.getValorEmDivida()==this.getValorEmDivida();
    }
    
    public Fornecedor Clone(){
        return new Fornecedor(super.getNome(),super.getContribuinte(),super.getIdade(),this.getPlafond(),this.getValorEmDivida());
     }
    public String toString(){
     StringBuilder f = new StringBuilder();
     
     f.append("#########################Fornecedor########################## \n");
     f.append("O Nome do Fornecedor é " +super.getNome()+"\n");
     f.append("O Contribuinte do Fornecedor é " +super.getContribuinte()+"\n");
     f.append("A idade do Fornecedor é " +super.getIdade()+"\n");
     f.append("O plafond é " +this.getPlafond()+"\n");
     f.append("O Valor em divida é " +this.getValorEmDivida()+"\n");
     f.append("########################FIM############################" +"\n");
     
     
     return f.toString();
}
        
}

Na classe Empregado variaveis numeroSeccao, salarioBase, IRS e a instrução calcularSalario.

public class Empregado extends Pessoa{
    
    private int numeroSeccao;
    private float salarioBase;
    private float IRS;
    
public Empregado(String nome, long contribuinte, byte idade, int numeroSeccao, float salarioBase, float IRS){
    super(nome, contribuinte, idade);
    this.numeroSeccao=numeroSeccao;
    this.salarioBase=salarioBase;
    this.IRS=IRS;
}
public int getNumeroSeccao(){
    return this.numeroSeccao;
}
public float getSalarioBase(){
    return this.salarioBase;
}
public float getIRS(){
    return this.IRS;
}
public void setNumeroSeccao(int n){
    this.numeroSeccao=numeroSeccao;
}
public void setSalarioBase(float c){
    this.salarioBase=salarioBase;
}
public void setIRS(float i){
    this.IRS=IRS;
}
public float calcularSalario(float salario){
    return salario=(salarioBase-IRS);
}

public boolean equals(Empregado E){
        return E.getNome()== super.getNome()&&E.getContribuinte()==super.getContribuinte()&& E.getIdade()==super.getIdade()&&E.getNumeroSeccao()==this.getNumeroSeccao()&&E.getSalarioBase()==this.getSalarioBase()&&E.getIRS()==this.getIRS();
    }
    
    public Empregado Clone(){
        return new Empregado(super.getNome(),super.getContribuinte(),super.getIdade(),this.getNumeroSeccao(),this.getSalarioBase(),this.getIRS());
     }
    public String toString(){
     StringBuilder e = new StringBuilder();
     
     e.append("#########################Empregado########################## \n");
     e.append("O Nome do Empregado é " +super.getNome()+"\n");
     e.append("O Contribuinte do Empregado é " +super.getContribuinte()+"\n");
     e.append("A idade do Empregado é " +super.getIdade()+"\n");
     e.append("O Numero de secção é " +this.getNumeroSeccao()+"\n");
     e.append("O Salario base é " +this.getSalarioBase()+"\n");
     e.append("O IRS é " +this.getSalarioBase()+"\n");
     e.append("########################FIM############################" +"\n");
     
     
     return e.toString();
}
}

E por final a classe cliente que é igual a fornecedor.


public class Cliente extends Pessoa {
    
        private float plafond;
        private float valorEmDivida;
        
        
        public Cliente(String nome, long contribuinte, byte idade, float plafond, float valorEmDivida){
            super(nome, contribuinte, idade);
            this.plafond=plafond;
            this.valorEmDivida=valorEmDivida;
        
    }
        public float getPlafond(){
            return this.plafond;
        }
        public float getValorEmDivida(){
            return this.valorEmDivida;
        }
        public void setPlafond(float p){
            this.plafond=plafond;
        }
        public void setValorEmDivida(float ved){
            this.valorEmDivida=valorEmDivida;
        }
        public float obterSaldo(float saldoc){
            return saldoc = (plafond-valorEmDivida);
        }
        
        public boolean equals(Cliente c){
        return c.getNome()== super.getNome()&&c.getContribuinte()==super.getContribuinte()&& c.getIdade()==super.getIdade()&&c.getPlafond()==this.getPlafond()&&c.getValorEmDivida()==this.getValorEmDivida();
    }
    
    public Cliente Clone(){
        return new Cliente(super.getNome(),super.getContribuinte(),super.getIdade(),this.getPlafond(),this.getValorEmDivida());
     }
    public String toString(){
     StringBuilder c = new StringBuilder();
     
     c.append("#########################Cliente########################## \n");
     c.append("O Nome do Cliente é " +super.getNome()+"\n");
     c.append("O Contribuinte do Cliente é " +super.getContribuinte()+"\n");
     c.append("A idade do Cliente é " +super.getIdade()+"\n");
     c.append("O plafond é " +this.getPlafond()+"\n");
     c.append("O Valor em divida é " +this.getValorEmDivida()+"\n");
     c.append("########################FIM############################" +"\n");
     
     
     return c.toString();
}
}

Tentei na classe teste, fazer apenas um pequeno teste para ver se funcionava e encontra.se assim:

public class TestePessoa {
    public static void main(String[]args){
        
        Cliente c1;
        
        c1= new Cliente("Miguel",24356313,30,500.3,350.2);
        System.out.println(c1.toString());
        
    }
}

Sei que ainda falta muita coisa no entanto era apenas para experimentar.

Se me poderem indicar quais os erros e o que tenho que modificar/alterar agradecia.

Qual o erro q ta dando?