不带参数但仍然赋值的构造函数?(java)

时间:2016-04-15 22:43:03

标签: java inheritance constructor

MyNewSong类中的构造函数有些问题。谁能解释它到底在做什么?据我所知,它不需要超级类的参数,但它会返回歌曲名称" First Song"对超级班来说,这是对的吗?子类没有它自己的歌曲字段,所以它只是将歌曲名称分配给超类名字段,这是正确的吗?我还没有看到非空(默认)构造函数,在此之前它没有参数,但仍然分配值。

谢谢!

if ( options.profile.referralToken ){ // referral case
  var invitation = Invitations.findOne({ token: options.profile.referralToken });
  if ( invitation )
    user.invitationId = invitation._id; // the invitation used
    user.invitedBy = invitation.userId; // the referring user
  }
  delete options.profile.referralToken;
}
return user;

public class Song {
    private String name;

    public Song(String name){
        this.name = name;
    }
}

3 个答案:

答案 0 :(得分:1)

当MyNewSong被实例化时,它将“First Song”传递给超级构造函数,后者将其指定为“name”。这个结构没什么奇怪的。由于对name的访问是“私有的”,并且没有访问该字段的公共/受保护方法,因此子类不会看到“name”属性。你看到否定投票的原因是你在发布问题之前应该做更多的阅读。

答案 1 :(得分:1)

MyNewSong类是Song的子类。因此,MyNewSong的实例本身就是Song。根据您的代码,每个Song都有一个nameMyNewSong的构造函数将"My First Song"作为歌曲名称传递给超类构造函数。因此,MyNewSong的所有实例都具有相同的name,具体为"My First Song"

我建议您阅读有关inheritance in the Java Tutorials的更多信息。

答案 2 :(得分:1)

新歌曲类继承了Song类的属性。命令:

super("First Song");

正在传递参数" First Song"作为超类宋的构造函数的参数。