WinFuture-Forum.de: Vererbung In Java - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Vererbung In Java chaos mit public, static und final Oo


#1 Mitglied ist offline   XDestroy 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.911
  • Beigetreten: 08. August 02
  • Reputation: 0

geschrieben 11. Januar 2007 - 17:59

hallo zusammen.

ich habe festgestellt das in java deutlich krasser auf so elemente wie public, protected etc. und bei vererbung auf abstract, final etc. geachtet wird. mich bringen die ein wenig durcheinander. vorallem dann, wenn es darum geht was sinnvoll ist und zum guten stil gehört.

ich habe folgende situation: ich habe ein programm. in diesem programm habe ich eine klasse (mit main), eine klasse die bestimmte aufgaben erfüllt und von dieser klasse noch zwei abgeleitete. die klasse mit main ist public. klarer fall sonst kratzt sie ab. ich vermute mal die andere klasse (die vaterklasse der beiden) muss auch public sein - richtig? sonst kann ich dir ja gar nich. wenn ich die nun protected mache, kann ich von der main aus zugreifen? in meinem buch wird immer von einem package gesprochen, aber so richtig hab ich das mit dem package nicht verstanden ehrlich gesagt. ein package ist eine datei, oder?

weiterhin geht es um die abgeleiteten klassen. ich habe überlegt die beiden klassen protected zu machen.
eben damit nur die funktionen in der vater klasse die funktionen der kinder benutzen können. richtig?

ausserdem frage ich mich ob es sinn macht die als final zu machen oder 'gar nix'?

zugegeben, ich frage mich halt, was es bringt eine klasse public oder protected zu machen. worauf bezieht sich das? check das nicht ganz. in C++ hat man eine variable oder methode public, private oder protected gemacht und damit definiert, wer auf diese variable zugreifen darf. eben zu verhindern, dass von außen zugegriffen werden kann. was bringt das aber bei einer klasse? wozu?


danke!!

gruß
xdestroy
0

Anzeige



#2 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 11. Januar 2007 - 19:03

Zitat

ein package ist eine datei, oder?

nein, in deinem filesystem ist es ein verzeichnis (solange es nicht in ein jar verpackt wurde). im grunde ist ein package ein .. paket (wär hät's gedacht) das ähnliche dinge gruppiert.

dein tolles buch scheint ja nicht so dolle zu sein. also mal ganz grob aufgeglieder, was public, private und protected ist:

- private: auf private elemente kann nur innerhalb der klasse, in der sie als private deklariert wurden zugegriffen werden.
- protected: auf protected elemente kann nur innerhalb des packages, in der sie als protected deklariert wurden zugregriffen werden
- public: alle dürfen auf dieses element zugreifen.

Zitat

weiterhin geht es um die abgeleiteten klassen. ich habe überlegt die beiden klassen protected zu machen.
eben damit nur die funktionen in der vater klasse die funktionen der kinder benutzen können. richtig?

welche 'die beiden' klassen meinst du? zugriff auf funktionen der kinder kann von innerhalb der elternklasse nicht geschehen ... natürlich kannst du auf eine class a extends b; von b aus auf instanzierte a.funktionen zugreifen, aber du kannst nicht von b aus b so aufrufen, als wäre es a.
ich kann das nicht gut erklären... schau dir dein buch an. das ist eigentlich total easybash...

Zitat

ausserdem frage ich mich ob es sinn macht die als final zu machen oder 'gar nix'?

? final = kann nur einmal gesetzt werden. ob das nun in deinem fall sinn macht, kann ich dir nicht aufs geradewo sagen...

Zitat

zugegeben, ich frage mich halt, was es bringt eine klasse public oder protected zu machen. worauf bezieht sich das? check das nicht ganz. in C++ hat man eine variable oder methode public, private oder protected gemacht und damit definiert, wer auf diese variable zugreifen darf. eben zu verhindern, dass von außen zugegriffen werden kann. was bringt das aber bei einer klasse? wozu?

ohm? also wenn du c++ wirklich verstanden hast, dann solltest du jetzt absolut keine probleme haben ... Oo.
kA was du jetzt für nen trip schiebst. zu diesem thema gibt es en masse tutorials. eigentlich bin ich schon viel zu sehr erklärbär gewesen...

gruss,
mo
I'm mó. mo's good twin.
0

#3 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 11. Januar 2007 - 19:19

Zitat

- protected: auf protected elemente kann nur innerhalb des packages, in der sie als protected deklariert wurden zugregriffen werden

Das ist wenn du keinen Modifier benutzt.

Auf Protected Elemente haben die Eltern-, als auch die Kindsklassen (die mit extends oder implements erben) Zugriff.

Zitat

ich habe folgende situation: ich habe ein programm. in diesem programm habe ich eine klasse (mit main), eine klasse die bestimmte aufgaben erfüllt und von dieser klasse noch zwei abgeleitete. die klasse mit main ist public. klarer fall sonst kratzt sie ab. ich vermute mal die andere klasse (die vaterklasse der beiden) muss auch public sein - richtig? sonst kann ich dir ja gar nich. wenn ich die nun protected mache, kann ich von der main aus zugreifen?

ähm...Ich habe absolut nichts verstanden.
Sag doch einfach mal konkret was du machen willst und dann können wir mal schauen, ob sich und vor allem wo sich bei dir ein Vererbungskonzept lohnt.

Zitat

zugegeben, ich frage mich halt, was es bringt eine klasse public oder protected zu machen. worauf bezieht sich das?

Auf welche Elemente eine abgeleitete Klasse Zugriff haben darf.

Zitat

wozu?

Zugriff, Code-Auslagerung, Kapselung...

Ansonsten kann ich mich mo nur anschließen. Ich bezweifle, dass du es in C++ verstanden hast. OOP ist OOP. Es ist idR überall gleich. Schnapp dir ein ordentliches Buch und lerne es.
0

#4 Mitglied ist offline   XDestroy 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.911
  • Beigetreten: 08. August 02
  • Reputation: 0

geschrieben 12. Januar 2007 - 10:03

naja ich fass es mal kurz:

in c++ habe ich NIE eine klasse private, protected oder public gestzt. eine klasse hieß bei mir einfach nur class. immer. innerhalb der klasse gab es dann ein paar public:-methoden und ein paar protected (und evtl. auch mal private). aber bei klassen kenn ich das nicht... sowas sehe ich in java das erste mal und frage mich daher, was es bringen soll eine klasse eben so zu setzten... für wen oder was gelten dann diese zugriffsberechtigungen von wo?
0

#5 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.942
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 12. Januar 2007 - 10:28

Also bezogen auf Klassen.
Foo.java
  1 public class Foo {
  2		 public static void main(String[] args) {
  3				 Vater v = new Vater();
  4				 v.setVorname("Heinz");
  5				 Kind k = new Kind();
  6				 k.setVorname("Klein Hugo");
  7 
  8				 System.out.println(v.getVorname() + " " + v.getNachname());
  9				 System.out.println(k.getVorname() + " " + k.getNachname());
 10		 }
 11 }
  1 class Vater {
  2		 private String vorname, nachname;
  3		 public Vater() {
  4				 this.nachname = "Schneider";
  5		 }
  6 
  7		 public void setVorname(String vorname) {
  8				 this.vorname = vorname;
  9		 }
 10 
 11		 public String getNachname() {
 12				 return nachname;
 13		 }
 14 
 15		 public String getVorname() {
 16				 return vorname;
 17		 }
 18 }
 19 
 20 class Kind extends Vater {
 21		 public Kind() {
 22				 super();
 23		 }
 24 }

Pro Datei kann man nur eine Klasse als public deklarieren. Das teilt dir sogar schon der Kompiler mit. Daher macht man idR auch mehrere Dateien, was zu dem auch übersichtlicher ist. Private Klasse gibt es in dem Sinne nicht (abgesehen von nested Klassen, darauf komme ich jetzt aber nicht zusprechen).

Wenn du im obigen Beispiel Vater oder Kind als public oder private deklarierst wird der Kompiler meckern. Daher eignet sich _immer_ einzelne Dateien zu erstellen (Vater.java und Kind.java).

Zusätzlich kannst du noch mit Packages experimentieren (die main in bspw in "package haupt;" und die anderen beiden in "package familie"). Und dann lässt du in der "Familie" die Modifier weg und guckst mal was passiert...
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0