Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen

mipflip

Mitglied
Habe letzte Prüfung leider ein wenig verbockt weil es bei diesem Beispiel mit den meisten
Punkten nicht hingehaut hat. Jetzt suche ich nach meinen Fehlern und bitte euch um
Unterstützung

Hier die Aufgabenstellung:
Code:
·  Es gibt Bücher, zu denen der Autorname, der Titel und die Sprache festgehalten 
werden soll.

·  Gedruckte Bücher und elektronische Bücher sind Unterklassen von Büchern. 
Gedruckte Bücher haben zusätzlich eine Seitenanzahl und sind lieferbar oder nicht.
Elektronische Bücher haben eine Dateigröße und ein Format. Erstellen Sie einen 
Konstruktor pro Klasse, der alle Instanzvariablen der jeweiligen Klasse initialisiert.

·   Die Klassen sollen folgende abstrakte Methoden haben:
                      Buch: drucken()
                      ElektronischesBuch: speichern()
                      GedrucktesBuch: kopieren()

·  Es sei eine Klasse WebArtikel als Unterklasse von ElektronischesBuch gegeben 
( dabei handelt es sich um eine nicht- abstrakte Klasse), sowie eine ebenfalls 
nicht-abstrakte Klasse Lehrbuch als Unterklasse von GedrucktesBuch.      

·  Erstellen Sie nun eine Klasse Beispiel mit der main Methode, die ein 
Buch –Array erzeugt und füllen Sie es mit vier Objekten von Klassen, 
die Sie in dieses Array abspeichern können.

· Welche Methode besitzen alle im vorgien Punkt erzeugten Objekte? 
Schreiben Sie eine Schleife in der main Methode, die für alle Elemente des 
Arrays diese Methode ausführt.

· Wann wird festgestellt, aus welcher Klassendefinition die ausführende Methode
herangezogen wird? Wie nennt man das dahinterstehende Konzept?

Ich poste nun jede Klasse einzeln um es übersichtlicher zu halten.
Ich habe auch immer neben den Code meine Fehler / Fragen geschrieben...

Java:
public interface Buecher {

   public String autorenname;       //fehler -> wurde nicht initialisiert
   public String titel;           //fehler -> wurde nicht initialisiert
   public String sprache;            //fehler -> wurde nicht initialisiert
   
   public abstract void drucken();    
}

Java:
public abstract class GedruckteBuecher implements Buecher{

   public int seitenzahl;
   public boolean lieferbar;
   
   public abstract void speichern();
   
   public GedruckteBuecher(int seitenzahl, boolean lieferbar) {
       this.seitenzahl = seitenzahl;
       this.lieferbar = lieferbar;
   }
}

Java:
public abstract class ElektronischeBuecher implements Buecher {
   
   public int datengroesse;
   public String format;
   
   public abstract void kopieren();
   
   public ElektronischeBuecher(int datengroesse, String format){
       this.datengroesse = datengroesse;
       this.format = format;
   }
}

Java:
public class WebArtikel extends ElektronischeBuecher {

   public void drucken() {}

   public void kopieren() {}
   
   public WebArtikel (int datengroesse, String format){
       super(datengroesse, format);
   }
}

Java:
public class Lehrbuch extends GedruckteBuecher{
       
   public void drucken(){}
   
   public void speichern(){}

   public Lehrbuch(int seitenzahl, boolean lieferbar){
       super(seitenzahl,lieferbar);
       }
   }

Java:
public class Bsp {

   public static void main(String[]args){
       Bsp eins = new Bsp();
       Buecher [] array = new Buecher[] {new Lehrbuch(5,true),new WebArtikel(5,"Hello")}; // nur 2 Objekte möglich oder ist die Angabe anders zu verstehen?
       for (int i = 0; i< array.length; i++){
           array[i].drucken();
           array[i].kopieren();       // Methode kopieren() is undefined for the type Buecher
           array[i].speichern();       // Methode kopieren() is undefined for the type Buecher
       }
   }
}

der letzte Punkt der Aufgabe bezieht sich auf dynamisches Binden?
Welche Methode eines Objekts tatsächlich aufgerufen wird, wird dynamisch zur Laufzeit festgestellt (“dynamisches Binden”).

ist die Umsetztung der Aufgabe hiermit erfüllt worden? Wurde das füllen des Array korrekt ausgeführt? Bin für alle Tipps und Vorschläge dankbar.
Lg
 

mipflip

Mitglied
neue Überlegung: ist hier die Klasse Buecher überhaupt ein Interface? Wäre es besser diese als abstrakte Klasse anzuschreiben die ebenfalls einen Konstruktor erstellt --> und mit super() dann die Eigenschaften an die Subklasse vererbt?
 

RalleYTN

Bekanntes Mitglied
Das Interface Buecher kann keine Attribute halten.
Statt
Java:
public interface Buecher {

   public String autorenname;
   public String titel;
   public String sprache;
 
   public void drucken();
}
müsste es
Java:
public interface Buch { // Habe den Namen geändert, da man hier normalerweise keinen Plural verwendet... ist aber Konventionssache
    public String getAutor(); // Methode
    public String getTitel(); // Methode
    public String getSprache(); // Methode
    public void drucken(); // Kein extra 'abstract'. Alle Methoden in einem Interface (wenn nicht statisch oder default) sind bereits abstrakt
}
sein.

Und zu dem Array.
Instanzen von Buch wissen nichts von den Methoden kopieren und speichern.
du müsstest erst mit instanceof checken was genau die Instanz nun ist und dann casten.
Beispiel:
Java:
array[i].drucken(); // Alle Bücher kennen drucken

if(array[i] instanceof GedrucktesBuch) {
    ((GedrucktesBuch)array[i]).speichern();
} else if(array[i] instanceof ElektronischesBuch) {
    ((ElektronischesBuch)array[i]).kopieren();
}
 

mipflip

Mitglied
ist es hier überhaupt nötig ein Interface anzulegen? wäre eine abstracte Klasse für Buch nicht besser?
den Befehl instanceof kannte ich bis jetzt noch nicht - vielen Dank.
Das macht das ganze jetzt ein wenig nachvollziehbarer.

bei der Aufgabe dem Array 4 Objekte zuzuweisen, kann ich doch nur Objekte von Lehrbuch und WebArtikel erstellen.
somit erstell ich einfach 2 Objekte von Lehrbuch und 2 von WebArtikel mit unterschiedlichen Werten?

Danke für die Antwort =)
lg
 

mrBrown

Super-Moderator
Mitarbeiter
ist es hier überhaupt nötig ein Interface anzulegen? wäre eine abstracte Klasse für Buch nicht besser?
Ja, das ist sinnvoller.

somit erstell ich einfach 2 Objekte von Lehrbuch und 2 von WebArtikel mit unterschiedlichen Werten?
Ja.


Außerdem hast du kopieren und speichern vertauscht.

Als auszuführende Methode würd ich nur drucken sehen - diese ist die einzige, die alle Bücher haben.
 

mipflip

Mitglied
Vielen Dank für eure Antworten - habe mal schnell alles ausgebessert was hier angemerkt wurde.
Hier das Ergebnis.

Java:
public abstract class Buch {

   public String autorenname;      
   public String titel;          
   public String sprache;
  
   public abstract void drucken();   
  
   public Buch(String autorenname, String sprache, String titel) {
       this.autorenname = autorenname;
       this.titel = titel;
       this.sprache = sprache;
   }
}

Java:
public abstract class GedrucktesBuch extends Buch{

   public int seitenzahl;
   public boolean lieferbar;
  
   public abstract void kopieren();
  
   public GedrucktesBuch(int seitenzahl, boolean lieferbar,String autorenname,String sprache,String titel) {
       super(autorenname, sprache, titel);
       this.seitenzahl = seitenzahl;
       this.lieferbar = lieferbar;
   }
}

Java:
public abstract class ElektronischesBuch extends Buch {
  
   public int datengroesse;
   public String format;
  
   public abstract void speichern();
  
   public ElektronischesBuch(int datengroesse, String format, String autorenname, String titel, String sprache){
       super(autorenname, titel, sprache);
       this.datengroesse = datengroesse;
       this.format = format;
   }
}

Java:
public class WebArtikel extends ElektronischesBuch {

   public void drucken() {}

   public void speichern() {}
  
   public WebArtikel (int datengroesse, String format, String autorenname,String sprache, String titel){
       super(datengroesse, format, autorenname, sprache, titel);
   }
}

Java:
public class Lehrbuch extends GedrucktesBuch{
      
   public void drucken(){}
  
   public void kopieren(){}

   public Lehrbuch(int seitenzahl, boolean lieferbar,String autorenname, String titel, String sprache){
       super(seitenzahl,lieferbar, autorenname, titel, sprache);
       }
   }

Java:
public class Bsp {

   public static void main(String[]args){
      
       Buch [] array = new Buch[] {new Lehrbuch(5,true, "H", "A", "L"), new Lehrbuch (4, false,"I","N","A"),new WebArtikel(4,"hi","O","P","A"), new WebArtikel(5,"Hello", "H", "A", "L")};
       for (int i = 0; i< array.length; i++){
           array[i].drucken();        // alle können drucken
          
           if(array[i] instanceof GedrucktesBuch) {       // nur Objekte von GedrucktesBuch können kopieren
               ((GedrucktesBuch)array[i]).kopieren();
           } else if(array[i] instanceof ElektronischesBuch) {       // nur Objekte von ElektronischesBuch können speichern
               ((ElektronischesBuch)array[i]).speichern();
           }
       }
   }
}

zur letzten Frage:
Code:
Wann wird festgestellt, aus welcher Klassendefinition die ausführende Methode herangezogen wird? Wie nennt man das dahinterstehende Konzept?
stimmt die Antwort dynamisches Binden? Zur Laufzeit wird festgestellt welche Methode herangezogen wird.
 

RalleYTN

Bekanntes Mitglied
Tipp: Klassenattribute sind normalerweise private oder protected und nicht public.
public nutzt man für gewöhnlich nur bei Konstanten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Abstrakt oder Interface Java Basics - Anfänger-Themen 3
Say public/default Interface Java Basics - Anfänger-Themen 9
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
I Browser integriert in Desktop Applikation - Webcam interface not found Java Basics - Anfänger-Themen 26
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
U Interface | constructor injection Java Basics - Anfänger-Themen 5
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
I JSON und Interface Java Basics - Anfänger-Themen 3
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
L Interface & Comparable Java Basics - Anfänger-Themen 15
T Interface Java Basics - Anfänger-Themen 0
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
A Interface Kuddelmuddel Java Basics - Anfänger-Themen 4
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
H abstract und interface Java Basics - Anfänger-Themen 4
F Interface Casting Java Basics - Anfänger-Themen 13
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Interface Java Basics - Anfänger-Themen 2
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
B Interface vs Abstract Java Basics - Anfänger-Themen 2
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
J Vererbung Abstrake Klasse <-> Interface Java Basics - Anfänger-Themen 5
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
N Interface Interface Erstellung Java Basics - Anfänger-Themen 3
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
K Interface: wie damit arbeiten Java Basics - Anfänger-Themen 4
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
T Vererbung Interface Java Basics - Anfänger-Themen 5
F Interface aus anderem Package nutzen Java Basics - Anfänger-Themen 10
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
B Erste Schritte Wie definiere ich in Java ein Interface? Java Basics - Anfänger-Themen 6
L OOP Interface Prinzip? Java Basics - Anfänger-Themen 6
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
J Innerhalb Interfacemethode: Interface als Attribut Java Basics - Anfänger-Themen 2
A Frage zu Interface Java Basics - Anfänger-Themen 16
J Interface Java Basics - Anfänger-Themen 3
W Interface Java Basics - Anfänger-Themen 1
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
Shams Kann man von einem Interface aus auf die dieses implementierende Klasse zugreifen? Java Basics - Anfänger-Themen 4
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Interface-Methode abrufen? Java Basics - Anfänger-Themen 2
P Vererbung Klasse erbt von abstrakter Klasse implementiert Interface Java Basics - Anfänger-Themen 2
M Konstanten in einem Interface definieren Java Basics - Anfänger-Themen 1
P interface Java Basics - Anfänger-Themen 1
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
M Interface als Datentyp Java Basics - Anfänger-Themen 12
K Interface Methoden überschreiben Java Basics - Anfänger-Themen 1
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
A Interface in Collection (Liste) angeben Java Basics - Anfänger-Themen 2
G Interface klasse Java Basics - Anfänger-Themen 4
N Interface Interface (sinnvoll) erzeugen Java Basics - Anfänger-Themen 8
D Interface namen bekommen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben