繁体   English   中英

Java从传入的对象中设置超级扩展类

[英]Java setting the super extended class from the a passed in object

我有这样的课

public class User implements UserInterface, Parcelable
{
    public User(int userID, String firstName, String lastName, String mobileNumber, Date dateAccountCreated)
    {
        this.userID = userID;
        this.firstName = firstName;
        this.lastName = lastName;
        this.mobileNumber = mobileNumber;
        this.dateAccountCreated = dateAccountCreated;
    }
}

然后,我有另一个扩展到这个类的类:

public class Invitee extends User
{
    private int eventDescision; 
    public Invitee(User u, int eventDescision)
    {
        super() = u;
        this.eventDescision = eventDescision;
    }
}

显然这行super() = u; 不起作用。 但是,在不创建另一个构造函数的情况下,如何将受邀请者收到的User对象传递给User对象并将其设置为扩展对象,如何实现此功能? 我知道我可以将对象作为带有getter和setter的变量,但是,我喜欢它的流动方式而不必这样做,并且被邀请者始终是用户。

您在Invitee构造函数中收到的User是一个真实实例,并且您正在创建另一个实例。 您不能在超级构造函数中分配一个实例,只能使用复制构造函数对其进行复制。

它应该是:

super(u.getUserID(), 
      u.getFirstName(), 
      u.getLastName(), 
      u.getMobileNumber(), 
      u.getDateAccountCreated());

您不能自动将基类的实例传递给子类的构造函数中的基类的构造函数调用( super )。

您可能想做的是在super调用中传递基类的属性。

例如,用户属性不是私有的:

public Invitee(User u, int eventDescision) {
  super(u.userID, u.firstName, u.lastName, u.mobileNumber, u.dateAccountCreated);
...

您可以:

  1. 在Invitee中使用装饰器设计模式
  2. 定义构造函数用户(用户u)
  3. 像以前被硫磺化的人一样:对所有参数使用super()

请记住,super正在调用超类的构造函数,因此您不能调用未定义的构造函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM