Vererbung Wurden die Aufgaben richtig programmiert?

JavaUndC-Prog

Bekanntes Mitglied
Hallo zusammen,

ich habe ein paar kleine alte Aufgaben gefunden und wollte mich gerne mal von euch korrigieren lassen. Es sind zwei kleine Aufgaben A und B, deren Aufgabenstellung man dem angefügtem Bild entnehmen kann. Mich würde interessieren, ob ich das so richtig gemacht habe, oder und ob man etwas besser machen könnte.

Danke für kommende Antworten!
aufgaben-png.8108


Code zu A:
Java:
public abstract class Tier {
    public String geräusch;
    public abstract void geräuschMachen();
}


public class Hund extends Tier{
    public Hund(){
        geräusch = "WAU!";
    }
   
    public void geräuschMachen(){
        System.out.println(geräusch);
    }
}


public class Katze extends Tier{
   
    public Katze(){
        geräusch = "MIAU!";
    }
   
    public void geräuschMachen(){
        System.out.println(geräusch);
    }
}


Code zu B:

Java:
import java.util.*;

public class Tierlaute {
    private static int zählerHund = 0;
    private static int zählerKatze = 0;
   
    public static void main(String[] args){

        ArrayList<String> tiere = new ArrayList<String>();
       
        for(int i = 0; i < args.length; i++){
            if(args[i].equals("Hund")){
                zählerHund++;
                tiere.add("Hund");
            }
            if(args[i].equals("Katze")){
                zählerKatze++;
                tiere.add("Katze");
            }
        }
        System.out.println("Anzahl Hund(e): " + zählerHund + "\nAnzahl Katze(n): " + zählerKatze);
        System.out.println(tiere);
    }
}
 

Anhänge

  • Aufgaben.png
    Aufgaben.png
    43,7 KB · Aufrufe: 138

Tarrew

Top Contributor
Zu A:
Die Variable "geräusch" soll private sein. Damit ist die Variable in den Klassen Hund und Katze nicht mehr sichtbar und du musst sie anders setzen.
Die Klasse Tier sollte einen Konstruktor besitzen in dem du Variable "geräusch" setzt. In den Klassen Hund und Katze dann den Konstruktor der Oberklasse mit super() aufrufen und den jeweiligen String übergeben.
Deine geräuschMachen Methode musst du dementsprechend auch anpassen.

Zu B:
Du sollst Objekte vom Typ Hund und Katze zu der Liste hinzufügen. Deine ArrayList ist aber vom Typ String.
 

JavaUndC-Prog

Bekanntes Mitglied
Danke für deine Antwort, ja klar private genau... :)
Was meinst du mit anpassen der Methode in Aufgabe A?

Zu B habe ich dann auch noch eine Frage, "Du sollst Objekte vom Typ Hund und Katze zu der Liste hinzufügen. Deine ArrayList ist aber vom Typ String." Bedeutet also: tiere.add(new Hund()) ? habe ich das richtig verstanden?
 

Tarrew

Top Contributor
Zu A:
In den Klassen Hund und Katze hast du keinen Zugriff auf die Variable "geräusch". Deswegen kannst du nicht einfach schreiben:
Java:
System.out.println(geräusch);

Zu B:
Ja genau. Dafür musst du den Typ der ArrayList natürlich auch ändern.
 

Tarrew

Top Contributor
Das würde gehen, würde aber den Sachverhalt nicht wirklich wiederspiegeln.

Wenn du jetzt ein Tier aus der Liste herausnehmen willst, musst du jedes Mal auf die Klasse "Tier" casten. Und casten will man eigentlich ungern. Deswegen solltest du für den Typ der ArrayList lieber die 'kleinste' gemeinsame Abstraktion nehmen.
 

Tarrew

Top Contributor
Das wäre prinzipiell das gleiche. Du kannst ja mal Folgendes probieren:

Code:
List list = new ArrayList();
list.add(new Hund());
Tier t = list.get(0);

Und gucken was der Compiler dir sagt. Einfach die Liste vom Typ Tier machen ;)
So würde ich es zmdst. machen.
 

JavaUndC-Prog

Bekanntes Mitglied
Das scheint zu funktionieren, er gibt nur an, das etwas parametrisiert werden soll...?

Dann würde mich natürlich noch Aufgabe A weiter interessieren:
ich habe wieder etwas verändert, ist dies nun richtig oder was muss noch geändert werden?
Bei der Klasse Hund bin ich mir überhaupt nicht sicher...

Java:
public abstract class Tier
{
    private String geräusch;
  
    public Tier(String geräusch){
        this.geräusch = geräusch;
    }
    public void geräuschMachen(){
        System.out.println(geräusch);
    }
}


public class Hund extends Tier{
    private String laut1 = "WAU!";
  
    public Hund(String geräusch){
        super(geräusch);
        geräusch = laut1;
        //super.geräuschMachen();
    }
  
     public void geräuschMachen(){
         super.geräuschMachen();
     }
}

Ob ich WAU! oder MIAU! als String vorher deklariere ist eigentlich sinnlos, da es nicht verwendet wird?

Für weitere Hilfen bin ich sehr Dankbar!
 
Zuletzt bearbeitet:

JavaUndC-Prog

Bekanntes Mitglied
Ich habe jetzt mal alle "Überflüssigen" Schritte wegfallen lassen:
Java:
public abstract class Tier
{
    private String geräusch;
   
    public Tier(String geräusch){
        this.geräusch = geräusch;
    }
    public void geräuschMachen(){
        System.out.println(geräusch);
    }
}


public class Hund extends Tier{
   
    public Hund(String geräusch){
        super(geräusch);
    }
   
     public void geräuschMachen(){
         super.geräuschMachen();
     }
}


public class TierTester {
    public static void main(String[] args){
        Hund dog = new Hund("Wau!");
        Katze cat = new Katze("Miau!");
        dog.geräuschMachen();
        cat.geräuschMachen();
    }
}

Ausgabe: Wau! Miau!
Es scheint also jetzt richtig zu sein, kann das bestätigt werden oder ist noch irgendwo ein Fehler zu finden. Auch habe ich mir nochmal die Aufgabenstellung angesehen, es scheint mir, als hätte ich es nun?

Falls dem so ist danke an euch, dass ihr mir geholfen habt. Wenn jedoch noch Fehler vorhanden sind würde ich mich freuen, wenn mir dies jemand mitteilen könnte. Danke!

Und nochmal als Nachfrage, die Methode in Tier muss doch nicht abstrakt sein oder?
 

Tarrew

Top Contributor
#Zu spät.

Ein Hund macht ja in deinem Beispiel immer Wau und eine Katze immer Miau. Hättest du also nicht zwingend als Parameter übergeben müssen.
 

Flown

Administrator
Mitarbeiter
Also man kann deine Variante noch etwas verfeinern, indem man den richtigen Konstruktor erstellt.
Nachdem die Geräusche immer gleich sind, solltest du für den Hund nicht immer "Wau!" übergeben müssen, ergo:
Java:
public class Hund extends Tier{
    public Hund(){
        super("Wau!");
    }
}
Du kannst dir das schreiben der Methode in der Kindsklasse sparen, da ja das Verhalten nicht geändert wird.
 

JavaUndC-Prog

Bekanntes Mitglied
Hallo nochmal, ich wollte hierfür nicht noch ein neues Thema erstellen. Ich habe noch weitere Aufgaben gefunden und würde mich wieder sehr freuen, wenn ihr mich wieder korrigieren könntet, dabei konnte ich bis jetzt sehr viel lernen, durch die guten Erfahrungswerte von euch!

Falls jemand Lust hat mir mitzuteilen, wie meine Lösungen sind oder ob das überhaupt richtig ist, bzw ob es auch besser geht, würde ich mich sehr über Antworten von euch Freuen!

weitere-png.8110


Aufgabe 1:
Java:
import java.util.*;

public class Potenz {
    public static void main(String[] args){
       
        ArrayList<Integer> liste = new ArrayList<Integer>();
       
        // String ohne [] dann würde auch args ohne [0] funktionieren...
        int n = Integer.parseInt(args[0]);
        while(n > 0){
            liste.add(n*n);
            n--;
        }
       
        Collections.reverse(liste); // Das stört mich, ich würde gerne ohne diesen Ausdruck //auskommen wollen
       
        for(Integer k : liste){
            System.out.println(liste);
        }
       [B][U] // Geht dies auch anders? [/U][/B]
    }
}

Aufgabe 2:
Java:
public class EnumAufrufart {

      public enum Aufrufart {
            KEIN_PARAMETER, EIN_PARAMETER, ZWEI_PARAMETER, VIELE_PARAMETER
    }
     
      public static Aufrufart gibAufrufart(String[] args) {
            if(args.length == 0){
                Aufrufart keinparam = Aufrufart.KEIN_PARAMETER;
                return keinparam;
            }
            if(args.length == 1){
                Aufrufart einparam = Aufrufart.EIN_PARAMETER;
                return einparam;
            }
            if(args.length == 2){
                Aufrufart zweiparam = Aufrufart.ZWEI_PARAMETER;
                return zweiparam;
            }
            if(args.length > 2){
                Aufrufart vieleparam = Aufrufart.VIELE_PARAMETER;
                return vieleparam;
            }
            return null;
          }
     
      public static void main(String[] args) {
           
            System.out.println(gibAufrufart(args));
            System.out.println();
          }
}


Meine Lösung zu 1 stört mich etwas, ich meine es funktioniert zwar, aber kann ich die Liste nicht auch rückwärts mit einer For Each durchlaufen, ich meine bei der for Schleife würde man dann einfach i-- einbauen, daher geht das nicht auch mit einer For Each Schleife?

Aufgabe 2 scheint auch zu funktionieren, aber ist das überhaupt so richtig? Oder soll die Methode im Konstruktor eingebaut werden?


Danke für kommende Antworten!
Ich freue mich!
 

Anhänge

  • Weitere.png
    Weitere.png
    33,7 KB · Aufrufe: 83

JavaUndC-Prog

Bekanntes Mitglied
Also so?

Java:
public class EnumAufrufart {

      public enum Aufrufart {
            KEIN_PARAMETER, EIN_PARAMETER, ZWEI_PARAMETER, VIELE_PARAMETER;
           
            Aufrufart gibAufrufart(String[] args) {
                if(args.length == 0){
                    Aufrufart keinparam = Aufrufart.KEIN_PARAMETER;
                    return keinparam;
                }
                if(args.length == 1){
                    Aufrufart einparam = Aufrufart.EIN_PARAMETER;
                    return einparam;
                }
                if(args.length == 2){
                    Aufrufart zweiparam = Aufrufart.ZWEI_PARAMETER;
                    return zweiparam;
                }
                if(args.length > 2){
                    Aufrufart vieleparam = Aufrufart.VIELE_PARAMETER;
                    return vieleparam;
                }
                return null;
              }
    }
     
     
      public static void main(String[] args) {
           
            //System.out.println(gibAufrufart(args));
            System.out.println();
          }
}


Wie kann ich die Methode denn mit System.out.println() aufrufen? //System.out.println(gibAufrufart(args)); geht ja nun nicht mehr.
 

JavaUndC-Prog

Bekanntes Mitglied
Ein kurzes static vor der Methode hat dann doch noch funktioniert. Naja das hat jetzt bei mir gedauert... :D Wobei das fast schon trivial ist.

Sind somit alle Fehler ausgebügelt oder gibt es noch Fehler?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
L Wie herausfinden ob JList Elemente hinzugefügt wurden? Java Basics - Anfänger-Themen 6
S Hilfe bei Praktischen Aufgaben von Arrays Java Basics - Anfänger-Themen 39
Lacotto Java Kurs Aufgaben Hilfe Java Basics - Anfänger-Themen 14
A Aufgaben Java Basics - Anfänger-Themen 30
P9cman Tipps für Rekursive Aufgaben mit Strings oder allgemein Java Basics - Anfänger-Themen 2
U anfänger braucht hilfe . wir konnten die aufgaben nicht beantworten Java Basics - Anfänger-Themen 5
A Selbe Aufgaben stellung, andere Lösung Java Basics - Anfänger-Themen 7
K Java Aufgaben-Wie ran gehen? Java Basics - Anfänger-Themen 6
S Was für Aufgaben könnten sich hier hinter verbergen? Java Basics - Anfänger-Themen 5
A Java Aufgaben Java Basics - Anfänger-Themen 5
G Probleme bei Frame aufgaben Java Basics - Anfänger-Themen 6
V Erste Schritte Hilfe gesucht beim einstieg in Java und erste Aufgaben aus der Berufsschule Java Basics - Anfänger-Themen 9
S Schnelle Hilfe bei 2 kurzen Aufgaben benötigt Java Basics - Anfänger-Themen 2
D Collections Aufgaben Java-Programmierung Überforderung Java Basics - Anfänger-Themen 36
M Java Insel Aufgaben von der DVD gesucht Java Basics - Anfänger-Themen 2
A Threads Threads bestimmte Aufgaben zuweisen... Java Basics - Anfänger-Themen 3
C Erste Schritte Probleme bei Aufgaben zu Schleifen Java Basics - Anfänger-Themen 11
N Java Aufgaben Java Basics - Anfänger-Themen 4
V Buch:Programmieren lernen mit Java-Aufgaben zu schwer ? Java Basics - Anfänger-Themen 2
M Klassen Hilfe bei Aufgaben Java Basics - Anfänger-Themen 5
K Button's mit versch. Aufgaben/ActionListener Java Basics - Anfänger-Themen 12
G OOP [Eilig] Biete 10€ für Lösung von 2 Grundlagen-Aufgaben Java Basics - Anfänger-Themen 6
M Problem/Unsicherheit bei Java-Aufgaben Java Basics - Anfänger-Themen 11
S Anfänger Aufgaben Java Basics - Anfänger-Themen 6
CR7 GUI-Aufgaben Java Basics - Anfänger-Themen 7
B Brauche Hilfe mit Aufgaben mit dem JavaEditor Java Basics - Anfänger-Themen 8
P Wie mehreren Threads Aufgaben zuweisen und abarbeiten lassen? Java Basics - Anfänger-Themen 15
D Zeitliche Aufgaben? Java Basics - Anfänger-Themen 3
S Herangehensweise an Aufgaben Java Basics - Anfänger-Themen 8
J Schleifen-Aufgaben Java Basics - Anfänger-Themen 6
L Java Programier Aufgaben für Anfänger Java Basics - Anfänger-Themen 5
B Was für Aufgaben haben die einzelne Entwurfsmuster? Java Basics - Anfänger-Themen 9
D Periodische Aufgaben erledigen in Webanwendung (Servlet/JSP) Java Basics - Anfänger-Themen 7
A Aufgaben zu OOP Java Basics - Anfänger-Themen 14
J Aufgaben Dynamisch auf Pool von Threads verteilen. Java Basics - Anfänger-Themen 3
-horn- Wie "Module" für wiederkehrende Aufgaben machen? Java Basics - Anfänger-Themen 7
G 3. Aufgaben und komme nicht weiter (Felder, Methoden) Java Basics - Anfänger-Themen 3
K Hallo, Ich suche kleine Java Program-Aufgaben zum üben ? Java Basics - Anfänger-Themen 4
J Aufgaben Java Basics - Anfänger-Themen 25
J Tolle Aufgaben Stellung - wer kann helfen? Java Basics - Anfänger-Themen 12
J Hilfe zu 2 Aufgaben Java Basics - Anfänger-Themen 27
G Hilfe komme nicht weiter bei diesen aufgaben Java Basics - Anfänger-Themen 2
M Suche gute Anfänger "Aufgaben" Java Basics - Anfänger-Themen 8
T Suchen Anfänger-Aufgaben Java Basics - Anfänger-Themen 4
Z SGD Aufgaben Jav04 Java Basics - Anfänger-Themen 4
C Darstellung von Datum - Codes richtig? Java Basics - Anfänger-Themen 2
C Rechnen mit Brüchen, ist meine Lösung soweit richtig? Java Basics - Anfänger-Themen 4
M OOP Brüche nicht richtig berechnen Java Basics - Anfänger-Themen 3
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
I Bild richtig speichern / Hochkant im File Explorer, nach Upload vertikal Java Basics - Anfänger-Themen 9
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
K Warum läuft das Programm nicht(bzw. nicht richtig) Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
B Semaphoren in Abhängigkeit an Bedingungen richtig setzen Java Basics - Anfänger-Themen 3
berserkerdq2 Habe ich die Aufgabe richtig gelöst? Java Basics - Anfänger-Themen 3
R CSV Reader läuft nicht richtig an Java Basics - Anfänger-Themen 8
E Umlaute und Sonderzeichen werden nach der Build Project nicht richtig angezeigt Java Basics - Anfänger-Themen 2
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
JensXF Methode überschreiben, so richtig? Java Basics - Anfänger-Themen 4
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
C Sind die while-Schleifen richtig in for-Schleifen ersetzt worden? Java Basics - Anfänger-Themen 8
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
L Ist der Code richtig Java Basics - Anfänger-Themen 3
J Wie bestehenden Quellcode in IDE richtig übernehmen Java Basics - Anfänger-Themen 27
F Methoden Methode richtig aufrufen Java Basics - Anfänger-Themen 3
D Klassen Klassendiagramm richtig erstellen Java Basics - Anfänger-Themen 20
J Module richtig einbinden Java Basics - Anfänger-Themen 2
B Sind meine If-Statements richtig angesetzt ? Java Basics - Anfänger-Themen 27
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
X Wie Generics richtig benutzen ? Java Basics - Anfänger-Themen 5
P Stringbuilder richtig einsetzen Java Basics - Anfänger-Themen 1
T if else Befehl funktioniert nicht richtig Java Basics - Anfänger-Themen 27
A Array richtig füllen Java Basics - Anfänger-Themen 2
S String richtig formatieren Java Basics - Anfänger-Themen 2
P Methoden richtig anwenden Java Basics - Anfänger-Themen 3
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6
D Richtig für Programmieren an der UNI lernen Java Basics - Anfänger-Themen 8
X Best Practice Ein int Array richtig mischen Java Basics - Anfänger-Themen 20
D Richtig Vorbereiten auf eine Programmier Klausur Studium. Java Basics - Anfänger-Themen 7
M ObservableList wird nicht richtig geleert Java Basics - Anfänger-Themen 0
T Sortieralgorithmen richtig? Java Basics - Anfänger-Themen 1
X Objekte einer ArrayList richtig ausgeben? Java Basics - Anfänger-Themen 8
S Wie implementiere ich MouseDragged richtig Java Basics - Anfänger-Themen 7
F Konstruktor richtig implementiert? Frage zu Benutzereingaben... Java Basics - Anfänger-Themen 9
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
P Input/Output PQ-Formel wird nicht richtig berechnet Java Basics - Anfänger-Themen 6
P Zeichenkette Zeichen ausschlißen funktioniert nicht richtig Java Basics - Anfänger-Themen 9
H Wie lerne ich Java richtig? Java Basics - Anfänger-Themen 2
N Ich weiß nicht, wie ich meinen Code richtig designen soll und komme nicht weiter Java Basics - Anfänger-Themen 4
B Wie instanzisiert man einen Cursor richtig? Java Basics - Anfänger-Themen 3
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
N Best Practice Ist die Sortierung richtig? Java Basics - Anfänger-Themen 3
J Erste Schritte Lottozahlen richtig generieren. Java Basics - Anfänger-Themen 12
J Behauptung so richtig? Java Basics - Anfänger-Themen 10
R Listen richtig implementieren Java Basics - Anfänger-Themen 3
B OOP Objekt in IF erzeugen - funktioniert nicht so richtig Java Basics - Anfänger-Themen 11
A Methode richtig überladen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben