Hallo zusammen, hier sind 3 Aufgaben aus dem Bereich Datenkapselung.
Könnt Ihr mir bitte helfen, ob ich bei den Lösungsvorschlägen richtig liege:
Aufgabe1:
Sie haben folgende Klassenvereinbarung:
public class Elefant{
int gewicht;
int groesse;
}
Die Klasse Elefant befindet sich in einem Paket tiere. Kann eine andere Klasse, die sich im Paket meinetests befindet, direkt auf die Werte der Instanzvariablen gewicht und groesse der Klasse Elefant zugreifen? Begründen Sie bitte Ihre Antwort.
===
Lösungsvorschlag1:
es ist ja public class, also gilt: Unterklasse aus anderen Paketen darf zugreifen.
wenn sich also im Paket meinetests eine Unterklasse des public class Elefant befindet, dann kann sie darauf zugreifen.
ansonsten ist der Zugriff nicht nicht möglich.
=============================================================================================================
Aufgabe2:
Sie haben folgende Klassenvereinbarungen in getrennten Quelltextdateien:
package tiere;
public class Katze {
private int gewicht;
private int farbe;
private int groesse;
}
package tiere;
public class ElternKatze extends Katze {
private int kinderzahl;
}
Die Klasse ElternKatze soll auf die Instanzvariable gewicht der Klasse Katze zugreifen können. Welche Möglichkeiten kennen Sie, diesen Zugriff zu ermög
lichen? Bewerten Sie diese Möglichkeiten bitte auch. Achten Sie dabei besonders auf die Datenkapselung.
Ein Tipp: Sie sollten mindestens drei verschiedene Varianten nennen können. Zwei hängen direkt mit der Vereinbarung der Instanzvariablen zusammen, die dritte dagegen nicht.
===
Lösungsvorschlag2: Instanzvariablen sind private. Damit die Subklassen darauf zugreifen können, müssen die Instanzvariablen entweder protected oder public sein - oder du brauchst eine get-Methode dafür.
also auf protected oder public ändern:
protected int gewicht;
oder
public int gewicht;
=============================================================================================================
Aufgabe3:
Bitte sehen Sie sich die folgende Klassenvereinbarung genau an.
public class Ziege {
private int gewicht;
private char geschlecht;
//ein Konstruktor
private Ziege(int gewicht, char geschlecht) {
this.gewicht = gewicht;
this.geschlecht = geschlecht;
}…
Können Sie in einem Quelltext in einem anderen Paket eine Instanz der Klasse Ziege erstellen? Begründen Sie bitte Ihre Antwort und nennen Sie gegebenenfalls die Stellen im Quelltext der Klasse Ziege, die geändert werden müssten.
===
Lösungsvorschlag3:
char muss geändert werden, dieser Datentyp ist nicht korrekt.
char gilt ja nur für einzelne Character, also einzelne Buchstaben.
es muss: "private int geschlecht" heissen.
Vom anderen Paket aus auf die private Instanzvariable Ziege zugreifen.
es muss heissen: protected oder public Ziege heissen. So kann man auf die Instanzvariable Ziege zugreifen.
korregierter Quelltext:
public class Ziege {
private int gewicht;
private int geschlecht;
//ein Konstruktor
public Ziege(int gewicht, int geschlecht) {
this.gewicht = gewicht;
this.geschlecht = geschlecht;
}…
Danke für die Antworten im Voraus.
Codix
Könnt Ihr mir bitte helfen, ob ich bei den Lösungsvorschlägen richtig liege:
Aufgabe1:
Sie haben folgende Klassenvereinbarung:
public class Elefant{
int gewicht;
int groesse;
}
Die Klasse Elefant befindet sich in einem Paket tiere. Kann eine andere Klasse, die sich im Paket meinetests befindet, direkt auf die Werte der Instanzvariablen gewicht und groesse der Klasse Elefant zugreifen? Begründen Sie bitte Ihre Antwort.
===
Lösungsvorschlag1:
es ist ja public class, also gilt: Unterklasse aus anderen Paketen darf zugreifen.
wenn sich also im Paket meinetests eine Unterklasse des public class Elefant befindet, dann kann sie darauf zugreifen.
ansonsten ist der Zugriff nicht nicht möglich.
=============================================================================================================
Aufgabe2:
Sie haben folgende Klassenvereinbarungen in getrennten Quelltextdateien:
package tiere;
public class Katze {
private int gewicht;
private int farbe;
private int groesse;
}
package tiere;
public class ElternKatze extends Katze {
private int kinderzahl;
}
Die Klasse ElternKatze soll auf die Instanzvariable gewicht der Klasse Katze zugreifen können. Welche Möglichkeiten kennen Sie, diesen Zugriff zu ermög
lichen? Bewerten Sie diese Möglichkeiten bitte auch. Achten Sie dabei besonders auf die Datenkapselung.
Ein Tipp: Sie sollten mindestens drei verschiedene Varianten nennen können. Zwei hängen direkt mit der Vereinbarung der Instanzvariablen zusammen, die dritte dagegen nicht.
===
Lösungsvorschlag2: Instanzvariablen sind private. Damit die Subklassen darauf zugreifen können, müssen die Instanzvariablen entweder protected oder public sein - oder du brauchst eine get-Methode dafür.
also auf protected oder public ändern:
protected int gewicht;
oder
public int gewicht;
=============================================================================================================
Aufgabe3:
Bitte sehen Sie sich die folgende Klassenvereinbarung genau an.
public class Ziege {
private int gewicht;
private char geschlecht;
//ein Konstruktor
private Ziege(int gewicht, char geschlecht) {
this.gewicht = gewicht;
this.geschlecht = geschlecht;
}…
Können Sie in einem Quelltext in einem anderen Paket eine Instanz der Klasse Ziege erstellen? Begründen Sie bitte Ihre Antwort und nennen Sie gegebenenfalls die Stellen im Quelltext der Klasse Ziege, die geändert werden müssten.
===
Lösungsvorschlag3:
char muss geändert werden, dieser Datentyp ist nicht korrekt.
char gilt ja nur für einzelne Character, also einzelne Buchstaben.
es muss: "private int geschlecht" heissen.
Vom anderen Paket aus auf die private Instanzvariable Ziege zugreifen.
es muss heissen: protected oder public Ziege heissen. So kann man auf die Instanzvariable Ziege zugreifen.
korregierter Quelltext:
public class Ziege {
private int gewicht;
private int geschlecht;
//ein Konstruktor
public Ziege(int gewicht, int geschlecht) {
this.gewicht = gewicht;
this.geschlecht = geschlecht;
}…
Danke für die Antworten im Voraus.
Codix