微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

构造函数java中的抽象对象

如何解决构造函数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 是否是个好主意,因为三部曲并不真正代表特定的电影,因此不能期望具有相同的属性一部电影可以。我建议您将继承作为一种编程概念进行研究,以便更清楚地了解您应该如何考虑它。

从您的构造函数采用 titlescore 的事实来看,您似乎正在尝试表示某种形式的已评级媒体,因此也许您可以拥有这样的结构:

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 举报,一经查实,本站将立刻删除。