Java Klasse in Klassen integrieren und was bei new rein?

SparkMonkay

Commander
Registriert
Feb. 2013
Beiträge
2.337
Hallo
Wollte die Instanzen etwas üben dann hat sich das ergeben nun habe ich jedoch eine Frage zu dem erstellen der "Hauptklasse"

Ich copy paste mal das hier hoch
Code:
//define the Weapon with which he fights
class Weapon{
	String m_WeaponName;
	String m_WeaponType;
	int m_WeaponDMG;
	
	Weapon (String Weaponname, String Weapontype, int Weapondamage){
		m_WeaponName=Weaponname;
		m_WeaponType=Weapontype;
		m_WeaponDMG=Weapondamage;		
	}
}
//define his armor, which he wears
class Armor{
	String m_ArmorName;
	String m_ArmorType;
	int m_ArmorDEF;
	
	Armor(String Armorname, String Armortype, int Armordefence){
		m_ArmorName = Armorname;
		m_ArmorType = Armortype;
		m_ArmorDEF = Armordefence;
	}
}
//define the Warrior who fights
class Warrior{
	String m_PlayerName;
	int m_PlayerLevel;
	Weapon m_Weapon;
	Armor m_Armor;
	int m_Health;
	
	Warrior(String Playername, int Playerlevel, int Playerhealth){
		m_PlayerName=Playername;
		m_PlayerLevel=Playerlevel;
		m_Weapon= new Weapon("Großer Zweihänder","Zweihänder",75);
		m_Armor= new Armor("Eisenrüstung","Kette",75);
		m_Health= Playerhealth+Playerlevel*8;
	}
		void datenAusgeben(){
			System.out.println("Player: "+m_PlayerName);
			System.out.println("Level: "+m_PlayerLevel);
			System.out.println("Weapon: "+m_Weapon);
			System.out.println("Armor: "+m_Armor);
			System.out.println("Health: "+m_Health);
			
		}

	}
//Create a class
public class Krieger2 {
	public static void main(String[]args){
		Warrior KaptainBio= new Warrior("KaptainBio",2,???,???,100);

Da ganz unten ist ??? was soll dahin? damit es gültig ist.

MfG
 
So sieht der Konstruktor aus: Warrior(String Playername, int Playerlevel, int Playerhealth)

Da steht alles drin, was du wissen musst...
 
Hi,

ohne es getestet zu haben müssen beide "???" weg.
Klasse Warrior hat im Konstruktor String Playername, int Playerlevel, int Playerhealth.

also macht man ein neues objekt :

Warrior SuperTyp = new Warrior ("naaammmeee" , 10, 300);

greez
 
Bringt Eclipse nicht raus = ungültig, ich hab versucht die "Definition" der "Hilfsklassen" da reinzupacken in () aber naja , nicht besser :/

Aber ich will ja das er mir anzeigt, was für eine Waffe und Rüstung der hat.
 
Ich frag mich ja immer wie Leute die nicht richtig deutsch schreiben können, programmieren wollen...

Warrior KaptainBio= new Warrior("KaptainBio",2, new Weapon(...), new Armor(.....),100);

z.B. Oder Weapon und Armor vorher instanzieren und übergeben.

Das was Du mit Klasse erstellen meinst, nennt man übrigens instanzieren, erstellt (oder definiert, wie Du es sagst) hast Du die Klasse vorher schon...
 
Hallo,
so einen Konstruktor hast du nicht.

Warrior KaptainBio= new Warrior("KaptainBio",2,???,???,100);

Wenn du einen Warrior erstellen möchtest, kannst du nur den Konstruktor benutzen :

Warrior(String Playername, int Playerlevel, int Playerhealth)
z.B. : Warrior KaptainBio= new Warrior("KaptainBio",2,100); , sonst screib dir deinen eigenen Konstruktor.

Warrior(String Playername, int Playerlevel, Weapon weapon, Armor armor , int Playerhealth){
this.m_PlayerName=Playername;
this.m_PlayerLevel=Playerlevel;
this.m_Weapon= weapon;
this.m_Armor= armor;
this.m_Health= Playerhealth+Playerlevel*8;
}

gruss

maya
 
Ah stimmt, dass der Konstruktor an sich nicht existent ist, hatte ich übersehen. :) Ich dachte ihm ging es nur um den Konstruktoraufruf und wie er dort noch weitere Objekte erzeugen kann.
 
1. Warum mit "this."?
Was sage ich damit aus?

2. Ich habe hinten im Buch gesehen, wie "Hilfsklassen" genutzt wurden, d.h. die wurden nicht im Instruktor eingebaut, so wie bei mir....

Ok, der erster Code sieht so aus
Code:
package Instanzen;
class Warrior{
	String m_Name;
	int m_Level;
	String m_Waffe;
	String m_Rüstung;
	int m_Health;
	
	Warrior(String Name,int Level,String Waffe, String Rüstung, int Health){
		m_Name = Name;
		m_Level = Level;
		m_Waffe = Waffe;
		m_Rüstung =  Rüstung;
		m_Health = Health;	
		
	}
	void datenAusgeben(){
	System.out.println("Name:"+m_Name);
	System.out.println("Level:"+m_Level);
	System.out.println("Waffe:"+m_Waffe);
	System.out.println("Rüstung:"+m_Rüstung);
	System.out.println("Leben:"+m_Health);


	
	}
}
public class Krieger1 {
	public static void main (String[]args){
		Warrior KaptainBio=new Warrior("KaptainBio",18,"Eisenschwert","Eisenrüstung",1000);
		
		KaptainBio.datenAusgeben();
	}
	

}

Nun wollte ich den erweitern
und bin da wo ich bin (Siehe erster Post)
 
Zuletzt bearbeitet:
Ok, nur zu Info, ich nutze das Buch von Markt und Technik
 
Was möchtest du eigentlich machen? Dem Krieger Rüstung und Schwert anlegen?

Was dir fehlt sind meiner Meinung nach getter und setter für die Klassenvariablen. Versuch mal eine Methode wie
public void setArmor (Armor armor){
hier weise ich meinem Krieger die Rüstung zu ;
}

zu schreiben.

Ansonsten schau dir zur Unterstützung mal (wenn du Eclipse benutzt) den Menüpunkt Source -> Generate Getter/Setter an
 
Ich find es deutlich sinnvoller, die Dinge beim Instantiieren zu übergeben, als für jeden Scheiss immer Getter und Setter zu machen ...
 
Ab 4 Parametern greife ich meistens zum Builder-Pattern, vor allem wenn der Konstruktor eine so nichtssagende Signatur wie Foo(int,String,int,String) hat. new Foo(10,"bla",42,"blub") versteht doch kein Mensch auf den ersten Blick.

Code:
new Warrior("KaptainBio",18,"Eisenschwert","Eisenrüstung",1000)
vs.
Code:
Warrior.builder().name("KaptainBio").level(18).weapon("Eisenschwert").armor("Eisenrüstung").hp(1000).build();
Weniger ist nicht immer mehr. Vor allem sind beim builder Verwechslungen unwahrscheinlicher und man kann ganz leicht einzelne Argumente optional machen und somit mit Standardwerten initialisieren. Z.B. Level 1, wenn kein Level angegeben wurde.

Als nächstes sollte man solche magic numbers/values wie in eben diesem Beispiel vermeiden. Fasse alle Waffen, Rüstungen usw. jeweils in Enums zusammen. Dann erwartet der Konstruktor/Builder auch sinnvoll typisierte Argumente und nicht Strings und ints.

Und wenn dein Buch tatsächlich dazu rät m_ vor alle member zu schreiben, muss es schon ganz schön alt sein oder von jemandem geschrieben sein, der C-Programmierer ist und Java-Code nur vom Hörensagen kennt.
 
@Tumbleweed: Full ACK! Aber glaubst du, dass er das Builder-Pattern implementiert bekommt? ^^

Und cool finde ich die Kombination aus "this" und "m_"... :-)
 
1668mib schrieb:
Ich find es deutlich sinnvoller, die Dinge beim Instantiieren zu übergeben, als für jeden Scheiss immer Getter und Setter zu machen ...

Kommt ja immer auf die Klasse und deren Umfang drauf an.
 
Der Umfang ist das letzte, was man dafür als Entscheidungsgrundlage hernehmen sollte...

Stattdessen sind es für mich Life-Cycle-Fragen und ob man die Dinge jemals ändern wird...
 
This brauchst Du erstmal nicht zwingend, das ist immer die Referenz auf das aktuelle Object. Zwingend brauchst Du es nur, wenn eine lokale Variable eine Objektvariable "überdeckt", z.B. wenn im Warrior Konstruktur die Playername Variable m_Playername heißen würde...

Man kann es aber auch schreiben, so dass men explizit sieht, dass es sich um eine Objektvariable handelt. Hängt auch vom persönlichen Stil ab.
 
ok

@ Tumbleweed
Und wenn dein Buch tatsächlich dazu rät m_ vor alle member zu schreiben, muss es schon ganz schön alt sein oder von jemandem geschrieben sein, der C-Programmierer ist und Java-Code nur vom Hörensagen kennt.

Von Markt und Technik, sind die doch nicht so die guten?
Habe eig nix schlechtes gehört :/
 
Naja gut, schlecht, das hängt von den Erwartungen ab... und naja, diejenigen, die das Buch "schlecht" bewerten würden, die lesen das Buch doch gar nicht mehr ;-)

Diese Bücher konzentrieren sich leider oft zu sehr auf den Einstieg statt auf Stil-Fragen... Schade eigentlich, in der Fahrschule bekommt man ja auch Stil-Themen erklärt...
 
Hab mir eigentlich das Buch zum Einstieg geholt, damit das ich dem Studium, wenn JAVA bearbeitet wird auch lockerer durchgeht.

Und würde auch gerne nach dem Buch auch was eigenes Fabrizieren.

Wenn wir schonmal bei JAVA sind bzw Programmieren

Coder= Physiker(aka 1 Zeichen/Buchstaben Variablen)?
Informatiker=Nutzen Variablen wie in meinem "Programm"?
 
Zurück
Oben