2016-05-02 13 views
1

Insbesondere sagen, ich habe eine Schnittstelle Film und konkrete Klassen Aktion und Romantik, die Filme zu implementieren. Kann ich dann eine Klasse Action-Romance haben, die Action and Implements Romance erweitert? Romantik ist eine vollständig implementierte konkrete Klasse.Können wir eine konkrete Klasse in Java implementieren?

Ich habe ähnliche Fragen nachgeschlagen, aber sie sind nicht spezifisch dafür, ob die Klasse, die implementiert wird, eine Schnittstelle, eine abstrakte Klasse oder eine konkrete Klasse ist.

+1

** Nein **. Java unterstützt keine Mehrfachvererbung von Klassen (jetzt, wenn 'Romance' auch eine' Schnittstelle' ist ...) –

+0

In dem Beispielfall, den Sie angegeben haben, würde ich keine Unterklasse für jedes Filmgenre erstellen - stattdessen I würde ein "Genre" enum machen, und jeder Film hat eine Liste dieser Genres. Stell dir vor, wie viel Code du sonst hinzufügen müsstest, jedes Mal, wenn du an ein neues Genre denkst ... –

Antwort

4

Nein. Java verfügt über ein Vererbungsmodell für eine einzige Implementierung. Das heißt, Sie können nicht von zwei konkreten Oberklassen erben. Sie können mehrere Schnittstellen implementieren, aber nur je eine einzelne konkrete Klasse.

1

Java unterstützt keine Mehrfachvererbung Sie haben, es zu tun (zum Beispiel) auf diese Weise:

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

    } 

}`