具体的には、私はインターフェースムービー、ムービーを実装する具体的なクラスのアクションとロマンスがあるとします。それから、アクションを拡張し、ロマンスを実装するクラスのアクションロマンスを持つことができますか?ロマンスは、完全に実装された具体的なクラスです。具体的なクラスをJavaで実装できますか?
私は同様の質問を検索しましたが、実装されているクラスがインターフェイスか抽象クラスか具体的なクラスかどうかは特定されていません。
具体的には、私はインターフェースムービー、ムービーを実装する具体的なクラスのアクションとロマンスがあるとします。それから、アクションを拡張し、ロマンスを実装するクラスのアクションロマンスを持つことができますか?ロマンスは、完全に実装された具体的なクラスです。具体的なクラスをJavaで実装できますか?
私は同様の質問を検索しましたが、実装されているクラスがインターフェイスか抽象クラスか具体的なクラスかどうかは特定されていません。
いいえ。Javaには、単一実装継承モデルがあります。つまり、2つの具体的なスーパークラスを継承することはできません。複数のインターフェイスを実装することはできますが、はのコンクリートクラスでしか実行できません。
Javaは、あなたが(たとえば)この方法でそれをしなければならない多重継承をサポートしていません:
import java.util.ArrayList;
import java.util.List;
class Movie{
private String name;
private List<Genre> genres;
public Movie(String name){
this.name=name;
this.genres = new ArrayList<Genre>();
}
public Movie withGenre(Genre genre){
this.genres.add(genre);
return this;
}
public String getName(){
return this.name;
}
public List<Genre> getGenres(){
return this.genres;
}
}
class Genre{
private String name;
public Genre(String name){
this.name = name;
}
}
class Romance extends Genre{
public Romance() {
super("Romance");
}
}
class Comedy extends Genre{
public Comedy() {
super("Comedy");
}
}
class Main{
public static void main(String[] args) {
Movie movie1 = new Movie("A Movie").withGenre(new Romance());
Movie movie2 = new Movie("A second Movie").withGenre(new Comedy()).withGenre(new Romance());
}
}`
**ありません**。 Javaはクラスからの多重継承をサポートしていません( 'Romance'も' interface'でもある場合...) –
あなたが与えた例では、各映画ジャンルのサブクラスを作成しませんでした。 「ジャンル」の列挙を行い、各映画にはこれらのジャンルのリストがあります。あなたが新しいジャンルを考えるたびに、追加しなければならないコードの量を想像してみてください... –