Hallo,
ich probiere mit sortierten Listen (mit Kompositum) herum. Ich möchte aus der sortierten Liste Einträge löschen oder einfügen können, die Unterklassen der Klasse Moebel sind.
Die Methode einfuegen hat als Typ vom Parameter "Datenelement".
Wie kann ich von einer anderen Klasse z. B. VERWALTUNG aus ein Objekt einfügen?
Wenn ich z.B. folgendes in der Klasse VERWALTUNG machen würde:
Bei mir gibt es aber auch Objekt vom Typ BETT, die ich einfügen könnte. Wie kann ich der Methode eintragHinzufuegen(...) in der Klasse VERWALTUNG beibringen, dass verschiedene Unterklassen zulässig sind, die jeweils andere Konstruktoren haben?
ich probiere mit sortierten Listen (mit Kompositum) herum. Ich möchte aus der sortierten Liste Einträge löschen oder einfügen können, die Unterklassen der Klasse Moebel sind.
Die Methode einfuegen hat als Typ vom Parameter "Datenelement".
Wie kann ich von einer anderen Klasse z. B. VERWALTUNG aus ein Objekt einfügen?
Wenn ich z.B. folgendes in der Klasse VERWALTUNG machen würde:
Java:
public void eintragHinzufuegen(double pr, int anr, double pr, int anr, boolean drehbar){
Datenelement eintragNeu = new Stuhl(pr, anr, pr, drehbar);
liste.einfuegen(eintragNeu);
}
Java:
public class Sortierteliste{
private Listenelement erster;
public Sortierteliste(){
erster = new Abschluss();
}
public Listenelement ersterGeben(){
return erster;
}
public Datenknoten datenknotenGeben(Datenelement suchinhalt){
return erster.datenknotenGeben(suchinhalt);
}
public void einfuegen(Datenelement de){
erster = erster.sortiertEinfuegen(de);
}
public Datenelement ersterEntfernen(){
Datenelement alterdatenknoteninhalt = erster.inhaltGeben();
erster = erster.naechsterGeben();
return alterdatenknoteninhalt;
}
public Datenelement entnehmen(Datenelement suchinhalt){ // Voraussetzung: Das Datenelement existiert.
Datenelement alterdatenknoteninhalt = datenknotenGeben(suchinhalt).inhaltGeben();
entfernen(suchinhalt);
return alterdatenknoteninhalt;
}
public Datenelement entnehmen2(Datenelement suchinhalt){ // mit Fehlerabfang
Datenelement alterdatenknoteninhalt = null;
if(datenknotenGeben(suchinhalt) == null){
System.out.println("Fehler!");
}
else{
alterdatenknoteninhalt = datenknotenGeben(suchinhalt).inhaltGeben();
entfernen(suchinhalt);
}
return alterdatenknoteninhalt;
}
public void entfernen(Datenelement suchinhalt){
erster = erster.sortiertEntfernen(suchinhalt);
}
public boolean istLeer(){
return (anzahlelementeGeben() == 0);
}
public int anzahlelementeGeben(){
return erster.anzahldatenknotenGeben();
}
public void alledatenAusgeben(){
erster.listendatenAusgeben();
}
}
public abstract class Listenelement{
public abstract Listenelement naechsterGeben();
public abstract Datenelement inhaltGeben();
public abstract Datenknoten datenknotenGeben(Datenelement suchinhalt);
public abstract Listenelement sortiertEntfernen(Datenelement suchinhalt);
public abstract Listenelement sortiertEinfuegen(Datenelement de);
public abstract Datenknoten hintenEinfuegen(Datenelement de);
public abstract Datenelement inhaltletzterGeben(Datenelement aktuellerinhalt);
public abstract int anzahldatenknotenGeben();
public abstract void listendatenAusgeben();
}
public class Abschluss extends Listenelement{
public Listenelement naechsterGeben(){
return this;
}
public Datenelement inhaltGeben(){
return null;
}
public Datenknoten datenknotenGeben(Datenelement suchinhalt){
return null;
}
public Listenelement sortiertEntfernen(Datenelement suchinhalt){
return this;
}
public Datenknoten sortiertEinfuegen(Datenelement de){
return new Datenknoten(this, de);
}
public Datenknoten hintenEinfuegen(Datenelement de){
return new Datenknoten(this, de);
}
public Datenelement inhaltletzterGeben(Datenelement aktuellerinhalt){
return aktuellerinhalt;
}
public int anzahldatenknotenGeben(){
return 0;
}
public void listendatenAusgeben(){
}
}
public class Datenknoten extends Listenelement{
private Listenelement naechster;
private Datenelement inhalt;
public Datenknoten(Listenelement le, Datenelement de){
naechster = le;
inhalt = de;
}
public void naechsterSetzen(Listenelement le){
naechster = le;
}
public Listenelement naechsterGeben(){
return naechster;
}
public Datenelement inhaltGeben(){
return inhalt;
}
public Datenknoten datenknotenGeben(Datenelement suchinhalt){
if(inhalt.istGleich(suchinhalt)){
return this;
}
else{
return naechster.datenknotenGeben(suchinhalt);
}
}
public Listenelement sortiertEntfernen(Datenelement suchinhalt){
if(inhalt.istGleich(suchinhalt)){
return naechster;
}
else{
if(inhalt.istKleiner(suchinhalt)){
naechster = naechster.sortiertEntfernen(suchinhalt);
}
return this;
}
}
public Datenknoten sortiertEinfuegen(Datenelement de){
if(inhalt.istGleich(de)){
naechster = naechster.sortiertEinfuegen(de);
return this;
}
else{
return new Datenknoten(this, de);
}
}
public Datenknoten hintenEinfuegen(Datenelement de){
naechster = naechster.hintenEinfuegen(de);
return this;
}
public Datenelement inhaltletzterGeben(Datenelement aktuellerinhalt){
return naechster.inhaltletzterGeben(aktuellerinhalt);
}
public int anzahldatenknotenGeben(){
return 1 + naechster.anzahldatenknotenGeben();
}
public void listendatenAusgeben(){
inhalt.datenAusgeben();
naechster.listendatenAusgeben();
}
}
public abstract class Datenelement{
public abstract void datenAusgeben();
public abstract boolean istGleich(Datenelement de);
public abstract boolean istKleiner(Datenelement de);
}
public abstract class Moebel extends Datenelement{
protected double preis;
protected int artnr;
public Moebel(double pr, int anr){
preis = pr;
artnr = artnr;
}
public int artnrGeben(){
return artnr;
}
public double preisGeben(){
return preis;
}
}
public class Stuhl extends Moebel{
private boolean istdrehbar;
public Stuhl(double pr, int anr, boolean drehbar){
super(pr, anr);
istdrehbar = drehbar;
}
public boolean istKleiner(Datenelement de){
return preis < ((Moebel) de).preis;
}
public boolean istGleich(Datenelement de){
return preis == ((Moebel) de).preis;
}
public void datenAusgeben(){
System.out.println("Preis: " + preis + ", Artikelnummer: " + artnr + ", Drehbar: " + istdrehbar + ".");
}
}
public class Bett extends Moebel{
private double laenge;
private double breite;
public Bett(double pr, int anr, double neuelaenge, double neuebreite){
super(pr, anr);
laenge = neuelaenge;
breite = neuebreite;
}
public boolean istKleiner(Datenelement de){
return preis < ((Moebel) de).preis;
}
public boolean istGleich(Datenelement de){
return preis == ((Moebel) de).preis;
}
public void datenAusgeben(){
System.out.println("Preis: " + preis + ", Artikelnummer: " + artnr + ", Laenge: " + laenge + ", Breite: " + breite + ".");
}
}
Zuletzt bearbeitet: