Objektorientierte Programmierung, わからない です

Tearchen

Mitglied
moin, ich versuche jetz seit einiger Zeit die objektorientierte Programmierung zu verstehen.....
aber irgendwie blicke ich da noch nicht so richtig durch. Mal ein Beispiel mit einigen Fragen.

Java:
class MyTest{	
  public MyTest(int a){   // Konstruktor 1

    i =    a;
    j = true;
  }
 
  public MyTest(int a,boolean b){     // Konstruktor 2
    i = a;
    j = b;
  }
 
  public MyTest(boolean b){    // Konstruktor 3
    i = 3;
    j = b;
  }
				
  public     int i;          
  public boolean j;
}

public class MyClass{
  public static void main(String[] args){

    MyTest object1 = new MyTest(1);       
    MyTest object2 = new MyTest(2,true);  
    MyTest object3 = new MyTest(false);   
		
    System.out.println(object1.i +" "+ object1.j);
    System.out.println(object2.i +" "+ object2.j);
    System.out.println(object3.i +" "+ object3.j);
  }
}

//1 true
//2 true
//3 false

1. Variablen "public int i" "public boolean j" sind Instanzvariablen ?
1.1 die Variablen die für alle Konstruktoren gelten werden in der classe MyTest initialisiert ?
2. auf sie kann auch vom Hauptprogramm aus zugegriffen werden ?
3. sie können auch vom Hauptprogramm aus verändert werden weil public ?
4. oder können sie nur in der class MyTest verändert warden ?
5. MyClass kann lediglich auf sie zugreifen ?
6. Zeile 25, 26, 27 es werden Objekte/Instanzen von den Konstruktoren erstellt ?
7. wieso müssen Objekte erstellt werden ?
7. wenn ich das Programm compiliere werden 2 Dateien erstellt MyClass und MyTest
was ist der Sinn dahinter könnte man nicht komplett das ganze Programm in MyClass schreiben ?
 
Zuletzt bearbeitet:
moin, ich versuche jetz seit einiger Zeit die objektorientierte Programmierung zu verstehen.....
aber irgendwie blicke ich da noch nicht so richtig durch. Mal ein Beispiel mit einigen Fragen.

Java:
class MyTest{	
  public MyTest(int a){   // Konstruktor 1

    i =    a;
    j = true;
  }
 
  public MyTest(int a,boolean b){     // Konstruktor 2
    i = a;
    j = b;
  }
 
  public MyTest(boolean b){    // Konstruktor 3
    i = 3;
    j = b;
  }
				
  public     int i;          
  public boolean j;
}

public class MyClass{
  public static void main(String[] args){

    MyTest object1 = new MyTest(1);       
    MyTest object2 = new MyTest(2,true);  
    MyTest object3 = new MyTest(false);   
		
    System.out.println(object1.i +" "+ object1.j);
    System.out.println(object2.i +" "+ object2.j);
    System.out.println(object3.i +" "+ object3.j);
  }
}

//1 true
//2 true
//3 false

1. Variablen "public int i" "public boolean j" sind Instanzvariablen ?
1.1 die Variablen die für alle Konstruktoren gelten werden initialisiert ?
2. auf sie kann auch vom Hauptprogramm aus zugegriffen werden ?
3. sie können auch vom Hauptprogramm aus verändert werden weil public ?
4. oder können sie nur in der class MyTest verändert warden ?
5. MyClass kann lediglich auf sie zugreifen ?
6. Zeile 25, 26, 27 es werden Objekte/Instanzen von den Konstruktoren erstellt ?
7. wieso müssen Objekte erstellt werden ?
7. wenn ich das Programm compiliere werden 2 Dateien erstellt MyClass und MyTest
was ist der Sinn dahinter könnte man nicht komplett das ganze Programm in MyClass schreiben ?

1. Ja
1.1. Was verstehst du unter Variablen die für alle Konstruktoren gelten?
2. Ja
3. Ja
4. Nein, da public
5. Nein, alle Klassen können auf sie zugreifen, da public
6. Es werden Objekte/Instanzen von der Klasse erstellt, dabei werden diese über den entsprechenden Konstruktor initialisiert.
7. Stell die eine Klasse als Schablone/Bauplan für ein Gerät vor. Um so ein Gerät zu nutzen muss es erst mal nach dieser Vorlage erzeugt werden.
8. Es werden 2 Klassen erzeugt, weil du ein Programm geschrieben hast, welches aus 2 Klassen besteht. Man könnte den Quelltext auch in eine Klasse Packen, das hast du aber nicht gemacht.
 
1.1. Was verstehst du unter Variablen die für alle Konstruktoren gelten?

3 Konstruktoren in MyTest in den Konstruktoren werden die Werte der Variablen festgelegt.
Unter den 3 Konstruktoren werden die beiden Instanzvariablen i und j initialisiert ?
Sie gelten für alle 3 Konstruktoren ? es wird also festgelegt das alle i´s vom typ int sind
und alle j´s vom typ boolean.

Man könnte die Variablen auch direkt immer in den Konstruktoren initialisieren ? aber das macht man nicht weil mehr Code ? weil man mehr schreiben müsste ?
 
1.1 alle instanzvariablen (alle nonstatic) werden implizit bei der objekterzeugung mit dem standardwert intialisiert. im konstruktor erfolgt dann noch ggf. die wertzuweißung.

d.h. es ist egal, ob du
Java:
private String test;
oder
Java:
private String test = null;
schreibst. nach der instanziierung ist test in beiden fällen
Code:
null

Man könnte die Variablen auch direkt immer in den Konstruktoren initialisieren?
aber das macht man nicht weil mehr Code?
weil man mehr schreiben müsste ?

die deklaration erfolgt ausserhalb, damit sie in der ganzen klasse verfügbar sind. die intialisierung s. oben und die wertzuweißung im konstruktor
 
Zuletzt bearbeitet:
1. Ja
1.1 versteht ich nicht
2. Ja
3. Ja
4.
5. Objekte vom Typ MyClass könne auf sie zugreifen.
6. Ja
7. Weil es eine Objektorientierte Programmierung ist ;-)
7. Der Sinn dahinter ist, das man pro Klasse eine Datei hat. 🙂
 
1.1. Was verstehst du unter Variablen die für alle Konstruktoren gelten?
3 Konstruktoren in MyTest in den Konstruktoren werden die Werte der Variablen festgelegt.
Unter den 3 Konstruktoren werden die beiden Instanzvariablen i und j initialisiert ?
Sie gelten für alle 3 Konstruktoren ?
Die Assoziation ist ein bisschen schief. Die Instanzvariablen an sich gelten nicht für die Konstruktoren - sie gelten vielmehr für alle Objekte, die aus dieser Klasse instanziiert werden. Und um diese Objekte zu erzeugen, können dann diese oder jene Konstruktoren aufgerufen werden, die dann aus dem genannten Grund auch Zugriff auf die Instanzvariablen haben.

Am Rande: Wieso eigentlich Japanisch im Threadtitel? ^^
 
Die Assoziation ist ein bisschen schief. Die Instanzvariablen an sich gelten nicht für die Konstruktoren - sie gelten vielmehr für alle Objekte, die aus dieser Klasse instanziiert werden. Und um diese Objekte zu erzeugen, können dann diese oder jene Konstruktoren aufgerufen werden, die dann aus dem genannten Grund auch Zugriff auf die Instanzvariablen haben.

ahhhhh *bing* *Licht aufgeht*


Am Rande: Wieso eigentlich Japanisch im Threadtitel?

Lerne in meiner Freizeit japanisch, lerne Java für Klausuren 😳

ps.:
わ か ら な い で す
wa ka ra na i de su
Ich weiß nicht ^^




Die Objekte werden also immer erzeugt durch

1. den Namen der Klasse in dem die Konstruktoren stehen
2. Name des Objektes
3. dann new um das Objekt zu erzeugen
4. aufruf der Konstruktoren
5. den Variablen die das Objekt besitzt werden Werte zugewiesen (muss nicht)

?


Die Konstruktoren in dem Programm sind Überladen da sich entweder die Variablen vom Typ unterscheiden oder in der Anzahl ?
 
Zuletzt bearbeitet:

Zurück
Oben