如何解决构造函数java中的抽象对象
对于一个计算机科学项目,我有一个 Movie 类,它实现了 Comparable 与 Comedy、Action 和 MovieTrilogy 的扩展。我遇到的问题是 MovieTrilogy 在构造函数中需要 3 个 Movie 对象。 MovieTrilogy 类需要将 Movie 对象作为实例变量,这意味着我需要声明一个抽象对象。我相信我的老师想要的是用 Comedy 和 Action 对象声明 MovieTrilogy 对象,但我仍然需要将它们存储为实例变量。我该怎么做?电影构造函数和 MovieTrilogy 类附在下面。
find_factors(0).
find_factors(N):- N>0,isPrime(N),write(N),nl,S is N-1,find_factors(S).
这是电影课。
public class MovieTrilogy extends Movie{
private Movie movie1;
private Movie movie3;
private Movie movie2;
public MovieTrilogy(Movie Movie1,Movie Movie2,Movie Movie3){
movie1 = Movie1;
movie2 = Movie2;
movie3 = Movie3;
}
下面的代码是我尝试编译 public abstract class Movie implements Comparable<Movie>{
private int score;
private String Title;
public Movie(String title,int score){
Title = title;
score = score;
}
public int getscore(){ return score; }
public String getTitle(){ return Title; }
public int compareto(Movie movie){
return this.compareto(movie);
}
public String getGenre(){
return null;
}
public String toString(){
return Title + " with a score of " + score;
}
}
时出现的错误。
MovieTrilogy
解决方法
好的,首先让我解决您的具体错误。为了使 MovieTrilogy
扩展 Movie
,它必须满足您在 Movie
类中强制的构造函数。因此,为了构造一个 Movie
(以及一个 MovieTrilogy
),您必须通过构造函数中的 super 方法提供一个 title
和一个 score
。
就像这样:
public MovieTrilogy(Movie Movie1,Movie Movie2,Movie Movie3) {
super("Trilogy title",0);
movie1 = Movie1;
movie2 = Movie2;
movie3 = Movie3;
}
但是我想知道将 MovieTrilogy
扩展为 Movie
是否是个好主意,因为三部曲并不真正代表特定的电影,因此不能期望具有相同的属性一部电影可以。我建议您将继承作为一种编程概念进行研究,以便更清楚地了解您应该如何考虑它。
从您的构造函数采用 title
和 score
的事实来看,您似乎正在尝试表示某种形式的已评级媒体,因此也许您可以拥有这样的结构:
class RatedTitle(String title,int score);
class Movie(String title,int score) extends RatedTitle(title,score);
class MovieTrilogy(String title,int score,Movie[] movies) extends RatedTitle(title,score);
(我希望你能想到一个比 RatedTitle
更好的名字)
编辑
正如@JohnHenly 指出的那样雄辩地说,
Movie#compareTo(Movie movie)
看起来有点无限。
您似乎对实现 Comparable
接口有误解,目前使用比较方法会导致 StackOverflowException
。通过返回 this.compareTo(movie)
,您试图调用 compareTo
中定义的 Movie
方法,然后该方法将尝试一次又一次地返回 this.compareTo(movie)
,直到 JVM 无法再接受它为止。
有很多文章解释了如何正确覆盖 toCompare
,但您可能想阅读这一篇,因为标题很精彩:Add the Comparable flavor,and taste the feeling.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。