(Code)
//Generieren Sie ein Instanz-Dutzend Vader
StChara dath = new StChara();//① ・ ②
//Feldwert ersetzen
dath.name = "Darth Vader";//③
dath.focelevel = 100;//③
dath.status = "Sir Dark";//③
** (Nachdenken) **
① Sichern Sie den Speicherbereich der Instanz und erstellen Sie Felder. ② Erstellen Sie eine Verknüpfung zu dem in ① erstellten Speicherbereich. Jetzt können Sie auf den in (1) erstellten Speicherbereich zugreifen. ③ Ersetzen Sie den Feldwert.
(Code)
//Erstellen Sie die Klassenvariable dath2
StChara dath = new StChara();
dath.name = "Darth Vader";
dath.focelevel = 100;
dath.status = "Sir Dark";
Stchara dath2;//(1) Definieren Sie die Klassenvariable dath2.
dath2 = dath;//(2) Ersetzen Sie das Verbindungsziel von dath durch dath2. (Weil keine neue Instanz mit new erstellt wird)
** (Nachdenken) **
Da die Klassenvariable eine Referenztypvariable ist, wird das Verbindungsziel zugewiesen.
//Heldenklasse
public class Hero {
String name;
int hp;
Sword heroSword;//(1) Erstellen Sie ein Schwert vom Typ heroSword.
void attack(){
System.out.println(this.name +"Ist"+this.heroSword.name+"Angegriffen mit!");//③
System.out.println("Zum Feind"+this.heroSword.damage+"Beschädigte Punkte! !!");//③
}
}
//Schwertklasse
public class Sword{
String name;
int damage;
}
//Hauptklasse
public class Main {
public static void main(String[] args) {
Sword sword = new Sword();
sword.name = "Schwert des Feuers";
sword.damage = 10;
Hero hero = new Hero();
hero.name = "Minato";
hero.hp = 100;
hero.heroSword = sword;//(2) Weisen Sie die Schwertinstanz dem heroSord-Attribut der Heldeninstanz zu.
hero.attack();
}
}
** (Ausgabeergebnis) **
Minato griff mit einem Feuerschwert an!
Fügte dem Feind 10 Schadenspunkte zu! !!
** (Nachdenken) ** (1) Deklarieren Sie die Klassenvariable vom Typ Schwert "heroSword" in der Hero-Instanz. (2) Ersetzen Sie heroSword durch die Schwertinstanz. (3) Da die Schwertinstanz der Klassenvariablen heroSword zugeordnet ist, hat "this.herosword.name" dieselbe Bedeutung wie "Schwert.name", und auf "Name" und "Schaden" der Schwertinstanz kann verwiesen werden.
** (Ergänzung) ** "Beziehung, in der eine Klasse ein anderes Feld verwendet" = "hat eine Beziehung". Im obigen Code wäre es "Held hat Schwert".
//Erstelle eine Heldeninstanz
Hero hero1 = new Hero();
hero1.name = "Minato";
hero1.hp = 100;
//Erstelle eine Heldeninstanz
Hero hero2 = new Hero();
hero2.name = "Asaka";
hero2.hp = 100;
//Assistenteninstanz erstellen
Wizard wizard = new Wizard();
wizard.name = "Sugawara";
wizard.hp = 50;
wizard.heal(hero1);
wizard.heal(hero2);
public class Wizard {
String name;
int hp;
void heal(Hero heroX) {;//Durch Verwenden einer Klassenvariablen als Argument können Sie eine Instanz zuweisen. Durch Zuweisen einer Instanz können Sie auf den Feldwert der Instanz verweisen.
heroX.hp+=10;
this.hp+=10;
System.out.println(heroX.name+"10 HP wiederhergestellt!");
System.out.println(heroX.name+"HP ist"+heroX.hp);
System.out.println(this.name+"HP ist"+this.hp);//Heilt den Helden und den Zauberer selbst.
}
}
** (Ausgabeergebnis) **
10 Minatos HP wiederhergestellt!
Minatos HP beträgt 110
Sugawaras HP beträgt 60
10 HP Asaka wiederhergestellt!
Asakas HP beträgt 110
Sugawaras HP beträgt 70
** (Nachdenken) ** Die anfängliche Verarbeitung (Wertzuweisung, Methode), die beim Erstellen einer Instanz ausgeführt werden soll, wird als Konstruktor bezeichnet.
** (Deklarationsmethode) **
Name der Klasse(Variablen, die Argumente erhalten){
this.Variable, die das Argument = Wert erhält;
}
Kann mit deklariert werden. Zu diesem Zeitpunkt ist die Angabe des Rückgabewerts einschließlich "void" NG.
(Code)
public class Hero {
String name;
int hp;
Hero(String name) {//Konstrukteur
this.hp = 100;
this.name = name;
}
** (Nachdenken) ** Durch Ändern des Argumenttyps und der Anzahl der Argumente können mehrere Konstruktoren mit demselben Namen verwendet werden. Beim Überladen können auch andere Konstruktoren aufgerufen und verwendet werden.
this(Argumentname);
(Code)
public class main {
public static void main(String[] args){
Cleric a = new Cleric("Geistliche",10,10);
Cleric b = new Cleric("Geistliche",10);
Cleric c = new Cleric("Geistliche");
}
}
public class Cleric {
String name;
int hp = 50;
final static int HPMAX = 50;
int mp;
final static int MPMAX = 10;
public void selfAid() {
System.out.println(this.name + "Gesungene Selbsthilfe!");
this.hp = HPMAX;
this.mp -= 5;
System.out.println("HP hat sich maximal erholt.");
}
//Konstrukteur
Cleric(String newName,int newHp,int newMp){
this.name = newName;
this.hp = newHp;
this.mp = newMp;
}
Cleric(String name,int hp){
this(name, hp, Cleric.HPMAX);//Da das Konstantenfeld ein statisches Element ist, das hier eine andere Verarbeitung aufruft, kann es aufgerufen werden, bevor die Instanz erstellt wird.
}
Cleric(String name){
this(name,Cleric.HPMAX);
}
}
** (Ausgabeergebnis) **
Priester Eine gesungene Selbsthilfe!
HP hat sich maximal erholt.
Priester B sang Selbsthilfe!
HP hat sich maximal erholt.
Priester C sang Selbsthilfe!
HP hat sich maximal erholt.
** (Nachdenken) ** Selbst wenn mehrere Instanzen aus derselben Klasse erstellt werden, müssen gemeinsame Werte und Methoden (Anfangswerte usw.) als statische Elemente definiert werden.
** (Referenz) Im vorherigen Darth Vader-Diagramm ... **
** (Definitionsmethode) **
Innerhalb der Klasse der Instanz statischer Datentyp Variablenname // statisches Feld erstellen
//Stchara-Klasse
static int firstLevel;
In der Hauptklasse Klassenname der Instanz.Variablenname = Wert // statischem Feld Wert zuweisen
//Stchara-Klasse
Stchara.firstLevel = 1;
** (Effekt durch Definieren erhalten) **
** (Definitionsmethode) **
Name der statischen Rückgabewertmethode{
Inhalte verarbeiten
}
** (Effekt durch Definieren erhalten) **
** (Hinweise zu statischen Methoden) **
Recommended Posts