在重载版本中调用构造函数

时间:2013-07-15 02:16:07

标签: java constructor overloading

我的课程如下所示;

public class Film {
    public String   filmName;
    public String   filmImage;
    public String   imdbRating;
    public String   description;

    public Film(){
        super();
    }

    public void Film(String filmName,String filmImage,String imdbRating){
        this.filmName=filmName;
        this.filmImage=filmImage;
        this.imdbRating=imdbRating;
    }


    public Film(String filmName,String filmImage,String imdbRating,String description){
        this.description=description;
        //I want call the other one, because I don't want to repeat         
        this.Film(filmName,filmImage,imdbRating);

    }

}

请注意构造函数的第二个定义电影(字符串,字符串,字符串,字符串)。为什么我无法在第二个构造函数中调用 Film(String,String,String)

有没有办法做到这一点?

5 个答案:

答案 0 :(得分:2)

您可以将其称为

this(filmName,filmImage,imdbRating)

但它应该首先在构造函数

中声明

答案 1 :(得分:2)

  1. public void Film不是构造函数定义,而是方法。删除void
  2. 您可以使用this(...)调用构造函数,此调用应该是构造函数中的第一行

答案 2 :(得分:2)

应按此顺序,然后您只在更通用的版本中实现构造函数。

    public Film(){
        this(null,null,null,null);
    }

    public Film(String filmName,String filmImage,String imdbRating){
        this(filmName,filmImage,imdbRating,null);
    }


    public Film(String filmName,String filmImage,String imdbRating,String description){
        this.filmName=filmName;
        this.filmImage=filmImage;
        this.imdbRating=imdbRating; 
        this.description=description;
    }

答案 3 :(得分:1)

您可以使用this(a, b, c)为字符串a,b,c调用其他构造函数。你试图用this.Film来调用它,这是不正确的语法。

答案 4 :(得分:0)

此(filmName,filmImage,imdbRating)

它应该首先在构造函数

中声明