Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe folgendes Verständnisproblem. Ich verstehe nicht, weshalb der Datentypen Autor genommen wird. Ist das eine Klasse bzw. Datentypen der selbst erstellt wurde? Zeige euch am besten mal den Code dazu. Normalerweise würde man doch den Datentyp String für das Attribut autor nehmen. Kann das jemand anhand eines konkreten Beispiels an Autor erklären?
public Class Sachbuch extends Artikel {
private Autor autor;
public Autor getAutor() {
return autor;
Ein String ist für sowas in der Regel keine gute Idee. Wie willst du vergleichen, ob zwei Bücher vom selben Autor geschrieben sind? Es könnte manche Namen mehrfach geben. Wie soll der Autor im String gespeichert werden? "Vorname Nachname" oder "Nachname, Vorname" Was davon ist sinnvoller? (Stichwörter dazu: Anzeige, Sortierung). Aus einem String kann man auch Vor- und Nachname nicht sauber trennen.
Vielleicht will man auch mehr Daten als den Namen zu einem Autor speichern - wie z.B. das Geburtsdatum.
Deswegen ist es sehr oft eine gute Idee einen eigenen Datentyp anzulegen, anstelle nur "String" oder ähnliches zu nutzen Im Detail muss man natürlich schauen - Vorname z.B. ist meist nicht sinnvoll als eigener Datentyp, weil dies nun wirklich ein einfacher String ist.
Bitte benutze Codetags für Code (auf das </> klicken).
Ja, Autor ist eine selbsterstellte Klasse. Es ist normalerweise nicht gut, etwas, das eigentlich ein komplexeres Objekt ist, möglichst in einen einfachen Datentyp zu pressen - auch wenn man zunächst meint, man braucht nicht mehr.
Z.B. hast du jetzt Vorname und Nachname und wie LimDul schon sagte, kannst du beides in einem String nur schlecht auseinanderhalten. Z.B. "Mimi von Mirbach" oder "Jaques de Chapeaurouge". Das kriegst du nicht auf einfachem Wege automatisch getrennt oder formatiert (von Mirbach, Mimi), dafür ist die Wahrscheinlichkeit sehr hoch das dir das um die Ohren fliegt, weil du Namen eingeben willst die du übersehen hast.
Z.B. Alina Tscherenkova - in diesem Namen ist gar kein Nachname enthalten, da Russen nämlich drei Namen - Vorname, Vatersname, Nachname - haben und die offizielle Anrede Vorname Vatersname ist, wobei der Vatersname aus dem Vornamen des Vaters und meistens der Endung -ova (bei Frauen) oder -itsch (bei Männern) gebildet wird.
Nehmen wir mal an, daß du den Namen des Autors einfach in einen String gepackt hast. An Namen wie Pierre du Bredouille oder Alexandr Dimitrowitsch hast du dabei nicht gedacht. Dann hast du, sobald du auf den Namen zugreifen mußt, richtig ernsthaft zu tun. Dinge wie Sortierung oder Formatierung arten in richtig häßliche Arbeit aus und es wird sicherlich immer mal Fehler machen.
Mit der Klasse Autor kannst du dieses Problem zumindest in dieser Klasse vom Rest des Programms isolieren. Autor stellt z.B. eine Methode getName() bereit. Die Arbeit, den Namen zurechtzuformatieren, hast du dann zwar immer noch - aber eben nur an einer Stelle in einer Klasse.
Besser wäre aber sicherlich so eine Lösung:
Java:
public class Autor{
private Name name;
public Autor(Name name){
this.name = name;
}
public String officialAddress(){
return name.officialName();
}
}
abstract public class Name {
abstract String officialName();
}
public class EuropeanName extends Name {
private String forname;
private String surname;
public EuropeanName(String forname, String surname){
this.forname = forname;
this.surname = surname;
}
@Override
String officialName(){
return forname + " " + surname;
}
}
public class RussianName extends Name{
private String forname;
private String patronymic;
private String surname;
public RussianName(String forname, String patronymic, String surname){
this.forname = forname;
this.patronymic = patronymic;
this.surname = surname;
}
@Override
String officialName(){
return forname + " " + patronymic;
}
}
Damit kannst du jede erdenkliche Namenskonvention erschlagen. Araber machen das ganze nochmal anders? Und du hast keine Ahnung wie? Das kann dir gerade völlig egal sein, das Problem kannst du dann lösen wenn du es brauchst. Einfach eine neue Klasse von Name ableiten, fertig. Notfalls kannst du auch biblische Geschlechtsregister hinterlegen, wenn es sein muß.
Oder noch ganz was anderes wichtiges: Überleg dir mal, wie du z.B. Titel oder andere Namenszusätze einbauen würdest. Autoren sind ja durchaus auch eitel und bestehen auf vollständige Anrede mit Prof. Dr. Dr. k. annjanix. Das geht jetzt eigentlich ziemlich einfach, und vor allem: Der Rest deines Programms bekommt von so einer Änderung gar nichts mit. Da wird ja gefälligst nur das gefressen, was von der Methode officialName() serviert wird - egal was es ist.
Oder Arrays / Type Variables. Es wird halt zwischen primitive types und reference types Unterschieden (JLS 4.1)
Und Reference Types wird in 4.3 Unterschieden in Objects (was du mit Klassen wohl meintest), Type Variables oder Array.
Nein, lies es doch einfach nach! Die Kapitel der JLS habe ich doch benannt.
Und das, was wichtig ist, habe ich auch geschrieben. Ein Array ist in Java / der JVM keine Klasse.
Es ist ja in Ordnung, wenn Du irgendwelchen ungenauen Kram postest (weil Du es nicht besser weißt), aber bei so Verbesserungen immer wieder auf etwas Falschem zu beharren ist einfach extrem dumm.
Da kann man dann also erst einmal erkennen, dass eine deutliche Trennung stattfindet in der JLS und diese Unterteilung ist durchaus wichtig.
b) "keine primitiven Datentypen sind sind Klassen." und "Auch eine ref führt irgendwann zu einer Klasse"
Das sind in einen Augen Aussagen, die mir zumindest Bauchschmerzen bereiten. Aber man kann da zumindest viele Parallelen finden:
- Neue Instanzen können mit new erzeugt werden. (Was aber nicht zwingend ist, siehe 10.6)
- Ich kann mit getClass() eine Class Instanz bekommen.
Damit kann man sich ggf. tatsächlich auf einen Punkt zurück ziehen, der vereinfacht sagt "Auch eine ref führt irgendwann zu einer Klasse".
(Bei der null Reference sehe ich das problematisch, denn den null Type finde ich nur in der JLS - aber da werde ich keine class Instanz zu finden fürchte ich).
Aber die Unterschiede liegen auf der Hand, z.B. im Bereich der Namensgebung ("[I" ist kein gültiger Bezeichner nach JLS 3.8) und in der Dokumentation des Frameworks, das ja die Klassen dokumentiert, tauchen diese auch nicht auf (gehören ja zu java.lang). Statt dessen findet sich Kapitel 10 in der JLS, die Arrays im Detail beschreiben.
Ich selbst sehe so Aussagen als schwammig und problematisch an.
Das hat keiner behauptet und auch nicht abgestritten.
Ich denke auch das sich @kneitzel manchmal zusehr reinsteigert und zuwenig die Sicht als Anfänger sieht.
Dem TE wird es nicht bis ins letzte bit interessieren.
Ich steigere mich nicht rein - ich finde nur eben diese schwammigen Aussagen (oder teilweise falsche Aussagen wie sie in anderen Threads getätigt wurden) falsch. Du studierst doch. Was meinst Du, wie so etwas in einer wissenschaftlichen Arbeit bewertet werden würde?
Mir ist das alles prinzipiell egal. Nur wenn etwas korrigiert werden sollte, dann korrigiere ich etwas. Versuche dabei sogar entsprechend auf Quellen hin zu weisen.
Und auch Anfängern sollte man schlicht nichts falsches sagen ...
Ich habe nie behauptet, dass es wichtig ist für einen Anfänger. Nur wenn ich einer Aussage widerspreche, dann bringe ich auch Argumente / Belege für meine Position. Und das habe ich schlicht gemacht. So kann sich jeder für sich überlegen, was ihn im Detail interessiert oder eben nicht. Ein Anfänger kann also die reine Aussage für sich nehmen (Und dann kann er hier durchaus mitnehmen, dass Arrays ggf. doch etwas anders zu behandeln sind als Instanzen anderer Klassen.)
Kurze Rückmeldung als Anfänger, der gerade die Variablen und Arrays "lernt": Auch wir Anfänger sind unterschiedlich und lernen unterschiedlich. Ich persönlich befürworte, es "bis ins letzte Bit zu wissen", andere lernen besser, wenn sie anfangs weniger Informationen haben. Es ist Eure (Profi-) Mischung hier, die es allen Anfängern ermöglicht daraus, davon zu lernen. Ich würde mich daher freuen, wenn Ihr es genauso weiter macht, lasst die verschiedenen Herangehensweisen doch alle in einem Beitrag, dann ist für jeden Anfänger das "Passende" dabei. Und an dieser Stelle nämlich wieder einmal: Danke für Euer mit-geteiltes Wissen! Mit hilft es sehr.
Ach, das läuft hier eigentlich immer so. Jemand stellt eine Frage, die beantwortet wird. Da man oft den Kenntnisstand nicht kennt oder sich jemand als Anfänger zu erkennen gibt, versucht man es möglichst einfach zu beschreiben. Der Einfachheit oder auch einem zeitlichen Mangel geschuldet sind dann Ungenauigkeiten oder Unvollständigkeiten, die von anderen im Nachgang ergänzt werden. Das führt dann z. T. in ausufernde Diskussionen (und teilweise in den Blödsinn ), am Ende haben sich fast alle wieder lieb und sofern man vom Thema abgekommen ist, kommt man auf dieses wieder zurück.
der gerade die Variablen und Arrays "lernt": Auch wir Anfänger sind unterschiedlich und lernen unterschiedlich. Ich persönlich befürworte, es "bis ins letzte Bit zu wissen"