Java 从超类获取所有数据(this=)

Java 从超类获取所有数据(this=),java,oop,Java,Oop,我不确定在以下情况下什么是好的OO设计 首先,我知道您不能使用: this = anObject; 但我的定位如下。我有一个超类(Film),有20多个数据字段。子类(ComedyFilm)扩展了超类,并且只有3个额外的数据字段 这是我想放在我的子类中的代码: public ComedyFilm(GenericFilm parent, FilmRating rating) { this = parent; } 因此,在创建ComedyFilm的新实例时,它将类似于: Fi

我不确定在以下情况下什么是好的OO设计

首先,我知道您不能使用:

 this = anObject;
但我的定位如下。我有一个超类(Film),有20多个数据字段。子类(ComedyFilm)扩展了超类,并且只有3个额外的数据字段

这是我想放在我的子类中的代码:

public ComedyFilm(GenericFilm parent, FilmRating rating) {
        this = parent;

}
因此,在创建ComedyFilm的新实例时,它将类似于:

Film myFilm = new Film(.... long constructor);
ComedyFilm myComedyFilm = new ComedyFilm(myFilm, FilmRating.EIGHTEEN);
有没有一种简单的方法可以做到这一点,而不必获取/设置构造函数中的每个变量?不做

   this.filmName = parent.filmname;
   this.directors = parent.directors;
   //etc...
谢谢

你应该有

public class ComedyFilm extends Film {
    public ComedyFilm(GenericFilm parent, FilmRating rating, FilmName filmName, Directors directors) {
       super(FilmName filmName, Directors directors);
       //bla
       }
}

派生类应该遵从基类构造函数来复制基类字段。这意味着您的ComedyFilm构造函数的第一行将是
super(someArgumentsForTheBaseClass)
,然后是初始化派生类所需的任何操作。

我将使用一些工厂方法,从
Film
创建
ComedyFilm

Film myFilm = new Film(...);
ComedyFilm comedy = ComedyFactory.createComedyFilm(myFilm, FilmRating.EIGHTEEN);

public class ComedyFactory {
    public static ComedyFilm createComedyFilm(Film parent, FilmRating rating) {
        ComedyFilm comedy = new ComedyFilm(parent);
        comedy.setRating(rating);
        return comedy;
    }
}

但您仍然需要在
ComedyFilm
中创建构造函数,该构造函数将复制原型中的每个属性(在本例中,是从
Film
)。原型就是这样工作的,不是吗?

你为什么不创建另一个构造器来获取电影数据和评级,并在内部调用长的超级构造器?你为什么创建一部电影,然后再创建一部喜剧电影?为什么不仅仅是一部有很长构造器的喜剧电影,或者仅仅是一部有创造者和创造者的电影呢?一部超级电影(电影名、导演……)怎么样?这部电影不是抽象的,但有很多类扩展它,不仅仅是喜剧电影。它还包括戏剧、电影等。。这也回答了你的问题,塔尔尼可拉斯。我从一个文件里读了很多电影。它们可以是喜剧电影、戏剧电影等。。但它们都是电影。如果有一种简单、快捷的方法,将超类传递给子类将节省我的时间,但显然没有这样的事情。无论如何谢谢:)调用超类构造函数必须是子类构造函数的第一行。(来自)