2016-05-02 11 views
1

В частности, скажем, у меня есть интерфейс Movie и конкретные классы Action and Romance, которые реализуют фильмы. Тогда, могу ли я создать класс Action-Romance, который расширяет действие и реализует роман? Романтика - это полностью реализованный конкретный класс.Можем ли мы реализовать конкретный класс в Java?

Я искал похожие вопросы, но они не являются конкретными о том, является ли реализуемый класс интерфейсом, абстрактным классом или конкретным классом.

+1

** Нет **. Java не поддерживает множественное наследование от классов (теперь, если 'Romance' также является« интерфейсом »...) –

+0

В примере, который вы указали, я бы не стал подклассом для каждого жанра фильма, вместо этого я сделает переписку «жанра», и в каждом фильме есть список этих жанров. Только представьте, сколько кода вам пришлось бы добавить иначе, каждый раз, когда вы думаете о новом жанре ... –

ответ

4

Нет. В Java существует модель с одним внедрением. Это означает, что вы не можете наследовать от двух конкретных суперклассов. Вы можете реализовать несколько интерфейсов, но только один конкретный класс.

1

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()); 

    } 

}` 

 Смежные вопросы

  • Нет связанных вопросов^_^