erste Berührung mit Objekten...

Dieguito

Mitglied
... Methoden und Eigenschaften. Ich hab mich jetzt ne Weile in Java eingelesen und möchte jetzt gerne einige Dinge ausprobieren bzw. Unterstützung oder Korrekturen von "echten Menschen". Ein Buch bietet da leider begrenzte Möglichkeiten.

1. Frage
Ist das, was diese class erzeugt das, was ein Objekt (kanone) genannt wird?

public static class kanone {
static String Typ = "Kanone";
String Name = "";
static int Erfahrung = 10;
static int Power = 10;
static int Reichweite = 10;

2. Frage
Die Eigenschaften (wie war noch mal der Fachbegriff, Attribute?) ändere ich mit einer anderen class, zum Beispiel:
public static void modifyObjekt() {
Objekte.kanone.Erfahrung = 11;
}

der Aufruf erfolgt durch modifyObjekt(); die Eigenschaft (Fachbegriff Attribut?) wird auch überschrieben.
Meine Frage: Java besteht auf "static". Warum, die Eigenschaft ist doch garnicht fest, sondern kann überschrieben werden.

3. Frage
public static void addObjekt() {
Objekte.kanone neu = new Objekte.kanone();
neu.Name = "";
}
Angesprochen wird das Objekt über neu.kanone ansprechen.
Kann ich keine Objekte dynamisch hinzufügen? Was ist, wenn ich 100 neue Objekte hinzufügen möchte. Lassen sich diese über einen Array anlegen?
Objekte.kanone neu[0] = new Objekte.kanone();

Hier nochmal das Applet, wie ich es bisher habe:
import java.applet.*;

public class Objekte extends Applet
{
public static class kanone {
static String Typ = "Kanone";
String Name = "";
static int Erfahrung = 10;
static int Power = 8;
static int Reichweite = 12;
}
public static void addObjekt() {
Objekte.kanone neu = new Objekte.kanone();
neu.Name = "";
}
public static void modifyObjekt() {
Objekte.kanone.Erfahrung = 11;
}
public static void showObjekt() {
System.out.println(Objekte.kanone.Erfahrung);
}
public void start() {
addObjekt();
showObjekt();
modifyObjekt();
showObjekt();
}
}

Wäre echt gut, wenn jemand mir da kurz was zu sagen könnte. Ich möchte gerne mit Objekten arbeiten und ein Buch ist, wie gesagt, sehr trocken...

Vielen Dank schon mal
 
Hallo Dieguito!

Aller Anfang ist schwer aber hier mal paar Fakten damit du ein wenig einen Überblick bekommst.
Klassen sind keine Objekte. Klassen sind einfach nur Klassen.
Ein Objekt ist die Instanz einer Klasse.

Vergleich: Eine Klasse ist ein Stempel, jedes Objekt ist 1 Druck den du mit dem Stempel machst... 1 Form viele "Abbildungen" davon.

Attribute sind die "Eigenschaften" eines Objektes. Sie stellen den "Zustand" des Objektes dar.
In der Welt der Objektorientierten Programmierung ist "Kapselung" ein wichtiges Stichwort.
Das bedeutet... Die Attribute (Eigenschaften) eines Objektes werden nur über berechtige Methoden der Klasse geändert.

Hast du zB. ein Attribut farbe dann kann dies über die Methode
Code:
public void setFarbe(String farbe)
{
this.farbe = farbe;
}
verändert werden. Kapselung bedeutet, dass Zugriff von außen nur über bestimmte Methoden erlaubt ist.

Methoden sind quasi die Fähigkeiten eines Objektes (was es kann). Da passiert etwas (etwa Farbe setzen). mit public vor der Methode (siehe oben) ermöglichst du einen Zugriff von außerhalb des Objektes auf diese Methode (also können andere Objekte etc. darauf zugreifen).

Mit
Code:
Klasse myclass = new Klasse();
erzeugst du ein neues Objekt von der Klasse "Klasse". Dieses Objekt findest du nun unter "myclass". Das ist die Referenz (ein Verweis) auf das tatsächliche Objekt im Speicher.

Ich hofe ich konnte dir einen kleinen Einblick in die Welt der Objekte geben.

Liebe Grüße,
Goose
 
ok, das hab ich verstanden.

ich möchte meine Frage noch einmal anders stellen:

import java.applet.*;

public class Start extends Applet {

// Objekte
public static class Ritter {

// grundwerte
static final String name = "Ritter";
static int verteidigung = 1;
static int angriff = 2;
static int x = 5;
static int y = 7;

// methoden
public static void changeItems(int _newNumber) {
Ritter.verteidigung = _newNumber;
}
public static void addItem () {
Ritter neu = new Ritter();

******************************************************************
* hier würde ich gerne beliebig viele neue Ritter erstellen *
******************************************************************

}

}
}


Dies ist das Applet (wird auch fehlerlos compiliert).

Ich erstelle jetzt 3 neue Objekte von Ritter erstellen mit der Methode
Ritter.addItem();
Ritter.addItem();
Ritter.addItem();

Wie kann ich diese Objekte ansprechen? Gibt es irgendeinen Index?
Wie kann ich die Objekte wieder anzeigen?

Danke mal
 
Da die Attribute static sind, sind alle Ritter gleich

mach eher sowas:
Java:
// Objekte
public class Ritter {

// grundwerte
static final String name = "Ritter";
int verteidigung = 1;
int angriff = 2;
int x = 5;
int y = 7;

// methoden
public void changeItems(int verteidigung ) {
this.verteidigung = verteidigung;
}

static bei Methoden bewirkt, dass diese nicht auf die lokalen Attribute, du greifst durch Ritter. auf die Klassenattribute zu, aber nicht auf die lokalen Objektattribute
 
Zuletzt bearbeitet:
wie rufe ich diese Methode dann ausserhalb der class auf?

Ritter.changeItem funktioniert ja nicht mehr, wenn es nicht static ist.
 
Hallo,

wenn du die Methode jetzt aufrufen möchtest, musst du ein Object von der Klasse anlegen.

Java:
Ritter ritter = new Ritter();
ritter.changeItem();

MFG

zEriX
 
Ausserhalb dieser Klasse Ritter, wie rufe ich die Methode auf? So funktiniert es leider nicht:

import java.applet.*;

public class Figuren extends Applet {

// Objekte
public class Ritter {

// grundwerte
static final String name = "Ritter";
int verteidigung = 1;
int angriff = 2;
int x = 5;
int y = 7;

Ritter ritter = new Ritter();

// methoden
public void changeItems(int _verteidigung ) {
ritter.verteidigung = _verteidigung;
}
}
public void start() {
Figuren.Ritter.changeItems(11);
Figuren.ritter.changeItems(11);
}
}
 
Ist ja klar. Du legst in der Klasse Ritter das Object ritter an und nicht in der Klasse Figuren.
So würde es funktionieren
Java:
public void start() {
      Ritter ritter = new Ritter();
      ritter.changeItem(); 
		
	}

Du hast ja gesagt, dass du dich schon eingelesen hast, aber schau dir mal das Buch an und les das Kapitel mit Klassen und Objekten noch mal durch.

MFG

zEriX
 
Zurück