抽象多态和继承的类赋值错误

use*_*515 0 java inheritance constructor

public class LawClient extends Client
{
    boolean defendant;
    String caseTopic;

        LawClient (String n, boolean d)
    {
        name = n;
        defendant = d;  
    }

        LawClient (String n, boolean d, String c, String e)
    {
        name = n;
        defendant = d;
        caseTopic = c;
        email = e;
    }

    public String determineStatus()
    {
        if(caseTopic == null)
        {
            return "none";
        }
        else
        {
        String s = "";
        s += "defendant: " + defendant +"\n" + "CaseTopic: " + caseTopic;
        return s;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

对于lawclient构造函数我没有sutable构造函数我得到2个错误,但不知道我做错了什么或如何解决它.

这是超级类,所以你可以运行它或看它.

abstract class Client
{
    protected String name;
    protected double balance;
    protected String email;

    Client (String n)
    {
        name = n;
    }

    Client (String n, String e)
    {
        name = n;
        email = e;
    }


    public String getName()
    {
        return name;
    }

    public double getBalance()
    {
        return balance;
    }

    public String getEmail()
    {
        return email;
    }

    public String setName(String a)
    {
        name = a;
        return name;
    }

    public double adjustBalance(double b)
    {
        balance = b;
        return balance;
    }

    public String setEmail(String e)
    {
        email = e;
        return email;
    }

    public abstract String determineStatus();

    public String toString()
    {
        String a = "";
        a += "name: " +name + ("\n")+"Balance: " +balance + ("\n")+"Email: " +email + ("\n");
        return a;
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 5

问题是构造函数如何在Java中为继承的类工作.如果未指定对父类的构造函数的调用,Java会自动在构造函数的顶部插入super()方法.

对于LawClient的以下构造函数:

LawClient (String n, boolean d)
{
    name = n;
    defendant = d;  
}
Run Code Online (Sandbox Code Playgroud)

Java在尝试将n分配给name之前调用了super(),但是没有在Client类中匹配的构造函数.

如果你向Client类添加一个no-args构造函数,一切都应该工作:

Client () {
    //no-args
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以在LawClient构造函数中调用正确的超类构造函数,如下所示:

LawClient (String n, boolean d)
{
    super(n); // this will call the first constructor of the Client class
    name = n;
    defendant = d;  
}
Run Code Online (Sandbox Code Playgroud)