Erste Schritte mit Java 1 Ähnliche Dinge zusammenstellen

Als Voraussetzung wird angenommen, dass in der Umgebung Java, Eclipse (oder) ausgeführt werden kann.

System.out.println Dieses Mal dachte ich, ich würde etwas schreiben, um mich mit Java vertraut zu machen, aber ich dachte, es würde Spaß machen, nur die Grammatik zu kopieren, also dachte ich, ich würde ein Programm erstellen, das Rollenspiele mehrmals bekämpfen kann. Ich werde. Dieses Mal werde ich die Grammatik weiter erläutern, aber ich wäre Ihnen dankbar, wenn Sie einen Blick darauf werfen könnten. Versuchen Sie zunächst Folgendes:

Battle.java


public class Battle {
	public static void main(String[] args) {
		System.out.println("GameStart!");
	}
}

Sie sollten die Wörter Game Start! Auf der Konsole sehen. Sie müssen sich nicht um andere Grammatiken kümmern, und jetzt müssen Sie sich noch nicht darum kümmern, aber der Kampf nach der Klasse und der Dateiname Battle.java müssen mit diesen beiden Schlachten übereinstimmen.

Variable

Als nächstes wollen wir es ein wenig erhöhen.

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		String name="taro";
		System.out.println(name);
		int hp =10;
		System.out.println(hp);
		System.out.println(name+"HP ist"+hp+"ist");
	}
}

Es gibt einige neue. Ich denke, dass die Anzahl von "String name =" taro "" und "int hp = 10" zugenommen hat. Hier steht String für eine Zeichenfolge und int für eine Ganzzahl. Mit anderen Worten bedeutet dies, "taro" in das Feld mit dem Namen der Zeichenkette und 10 in das Feld mit dem Namen hp der Ganzzahl einzufügen. Diese können auch an die Konsole ausgegeben werden, indem sie in "System.out.println" abgelegt werden. Variablen und Zeichenfolgen werden in der letzten Zeile gemischt. Sie können sie jedoch auch mithilfe von "Variable +" Zeichenfolge "" an die Konsole ausgeben. Lassen Sie uns ein bisschen mehr arbeiten

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		String playerName="taro";
		System.out.println(playerName);
		int playerHp =10;
		System.out.println(playerHp);
		System.out.println(playerName+"HP ist"+playerHp+"ist");
		String monsterName = "slime";
		System.out.println(monsterName);
		int monsterHp = 3;
		System.out.println(monsterHp);
		System.out.println(monsterName+"HP ist"+monsterHp+"ist");
	}
}

Es gibt verschiedene Änderungen, aber zuerst habe ich Name und HP in playerName und playerHp geändert. Zusätzlich wurden monsterName und monsterHp hinzugefügt. Es ist ein Moment, wenn Sie es kopieren, aber denken Sie nicht, dass es problematisch ist, wenn Sie es selbst schreiben? So dachten die alten klugen Leute. Lassen Sie uns ähnliche Dinge zusammenstellen. Können Sie hier etwas Ähnliches aus dem obigen Code finden? In der Tat gibt es einige ähnliche.

Zuallererst wahrscheinlich am einfachsten zu verstehen System.out.println (HP von Spielername +" ist "+ playerHp +" ") Wann Es gibt zwei Arten von "System.out.println" (HP von monsterName + "ist" + monsterHp + ")". Außerdem ist es ähnlich, dass nur der Name und HP angezeigt werden. Diese können wie folgt zusammengefasst werden.

Methode

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		String playerName="taro";
		int playerHp =10;
		display(playerName,playerHp);
		
		String monsterName = "slime";
		int monsterHp = 3;
		display(monsterName,monsterHp);
	}
	
	public static void display(String name,int hp) {
		System.out.println(name);
		System.out.println(hp);
		System.out.println(name+"HP ist"+hp+"ist");
	}
}

Was auf Battle.java geschrieben ist, ist ziemlich ordentlich, aber es gibt eine neue Anzeige. Dies wird als Methode bezeichnet und dient zur Zusammenfassung der Aktionen. Dieses Mal erwarte ich, dass ein Feld mit dem Namen name vom Typ String und ein Feld mit dem Namen hp vom Typ int enthalten sind. Wenn Name und hp eingegeben werden, werden sie angezeigt. Diese Anzeige macht das. Lassen Sie uns etwas tiefer in die Methode eintauchen. Versuche Folgendes:

Clac.java


public class Calc {

	public static void main(String[] args) {
		int number1 = 3;
		int number2 = 6;
		int output=plus(number1,number2);
		System.out.println(output);
	}
	
	public static int plus(int plus1,int plus2) {
		int result = plus1+plus2;
		return result;
	}
}

Hier gibt es auch eine Plus-Methode. Dies ist eine Methode, die Nummer1 und Nummer2 addiert und das Ergebnis zurückgibt. Um das Ergebnis zurückzugeben, müssen Sie zuerst angeben, was die Methode zurückgibt. Das ist das int vor plus. Dies gibt den Typ des zurückzugebenden Ergebnisses an, dh den Typ. Und der Teil, der das Ergebnis zurückgibt, ist der Teil von "Ergebnis zurückgeben". Es wurde früher als statisch bezeichnet, aber das liegt daran, dass main statisch ist. Es ist nicht sehr wichtig, also lass es vorerst in deinem Kopfwinkel. Kommen wir zurück zum Hauptthema. Battle.java habe ich bereits erwähnt, aber es gibt noch ähnlichere.

Klasse

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		Player player=new Player();
		player.name="taro";
		player.hp=10;
		display(player.name,player.hp);
		
		String monsterName = "slime";
		int monsterHp = 3;
		display(monsterName,monsterHp);
	}
	
	public static void display(String name,int hp) {
		System.out.println(name);
		System.out.println(hp);
		System.out.println(name+"HP ist"+hp+"ist");
	}
	
	
}

class Player{
	String name;
	int hp;
}

Ich denke, dass oben eine neue Klasse namens Player hinzugefügt wurde. class ist eine Funktion, mit der Sie neue Typen wie String und int selbst erstellen können. Player player deklariert eine neue Variable namens player, und new Player () erstellt eine neue Entität für den Spielertyp. Wenn es der offizielle Name ist, wird es als Objekt bezeichnet. Die Anzahl der Codezeilen selbst hat sich nicht verringert, ist jedoch leichter zu erkennen. Früher war es notwendig, den Namen der Variablen zu ändern, um den Namen und die HP des Monsters einzugeben. Wenn Sie ihn jedoch auf diese Weise zusammensetzen, müssen Sie den Namen der Variablen nicht ändern. Übrigens, machen wir auch ein Monster.

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		Player player=new Player();
		player.name="taro";
		player.hp=10;
		display(player.name,player.hp);
		
		Monster monster = new Monster();
		monster.name = "slime";
		monster.hp = 3;
		display(monster.name,monster.hp);
	}
	
	public static void display(String name,int hp) {
		System.out.println(name);
		System.out.println(hp);
		System.out.println(name+"HP ist"+hp+"ist");
	}
	
	
}

class Player{
	String name;
	int hp;
}

class Monster{
	String name;
	int hp;
}

Es war sehr erfrischend. Eigentlich gibt es hier ein Problem. Leute, die mit Java arbeiten, werden wütend, wenn sie den Code "player.name" sehen. Wenn Sie es möglich machen, player.name direkt auszuführen, können Sie den Wert fälschlicherweise neu schreiben. Nun, ich möchte nicht böse werden, also lasst uns den Wert ermitteln und den Wert mit der Methode zuweisen.

Verkapselung

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		Player player=new Player();
		player.setName("taro");
		player.setHp(10);
		display(player.getName(),player.getHp());
		
		Monster monster = new Monster();
		monster.setName("slime");
		monster.setHp(3);
		display(monster.getName(),monster.getHp());
	}
	
	public static void display(String name,int hp) {
		System.out.println(name);
		System.out.println(hp);
		System.out.println(name+"HP ist"+hp+"ist");
	}
	
	
}

class Player{
	private String name;
	private int hp;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		this.hp = hp;
	}
}

class Monster{
	private String name;
	private int hp;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		this.hp = hp;
	}
}

Privat dient zum Einschränken des Zugriffs und kann nur von derselben Klasse aus aufgerufen werden. Das in setName, setHp usw. verwendete Schlüsselwort bedeutet auch das dieser Klasse. Dies erleichtert das Verständnis, da der von der Methode empfangene Wert denselben Namen haben kann. Hier gibt es etwas Ähnliches. Das ist Spieler und Monster. Lassen Sie uns diese zusammenstellen.

Erbe

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		Player player=new Player();
		player.setName("taro");
		player.setHp(10);
		display(player.getName(),player.getHp());
		
		Monster monster = new Monster();
		monster.setName("slime");
		monster.setHp(3);
		display(monster.getName(),monster.getHp());
	}
	
	public static void display(String name,int hp) {
		System.out.println(name);
		System.out.println(hp);
		System.out.println(name+"HP ist"+hp+"ist");
	}
	
	
}

class Animal{
	private String name;
	private int hp;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		this.hp = hp;
	}
}

class Player extends Animal{
	
}

class Monster extends Animal{
	
}

Ich denke, es gibt eine neue Tierklasse und Spieler und Monster haben "Tier erweitern". Dies ist Vererbung, und Werte und Methoden werden unverändert vererbt. Selbst wenn der Wert oder die Methode von Player oder Monster verschwindet, tritt daher oben kein Fehler auf. Sie können dies auch durch Erben tun.

Polymorphismus

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		Player player=new Player();
		player.setName("taro");
		player.setHp(10);
		display(player);
		
		Monster monster = new Monster();
		monster.setName("slime");
		monster.setHp(3);
		display(monster);
	}
	
	public static void display(Animal animal) {
		System.out.println(animal.getName());
		System.out.println(animal.getHp());
		System.out.println(animal.getName()+"HP ist"+animal.getHp()+"ist");
	}
	
	
}

class Animal{
	private String name;
	private int hp;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		this.hp = hp;
	}
}

class Player extends Animal{
	
}

class Monster extends Animal{
	
}

Ich habe die Anzeigemethode umgeschrieben, um sie "Anzeige (Tier Tier)" zu machen. Ich habe es direkt dort platziert, wie "Anzeige (Spieler)" oder "Anzeige (Monster)". Es scheint, dass ein Fehler auftritt, weil der Typ unterschiedlich ist, aber es gibt kein Problem, da Spieler und Monster den Typ "Animal" durch Vererbung erben. Mit den folgenden Funktionen können Sie es noch einfacher machen.

Konstrukteur

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		Player player=new Player("taro",10);
		display(player);
		
		Monster monster = new Monster("slime",3);
		display(monster);
	}
	
	public static void display(Animal animal) {
		System.out.println(animal.getName());
		System.out.println(animal.getHp());
		System.out.println(animal.getName()+"HP ist"+animal.getHp()+"ist");
	}
	
	
}

class Animal{
	private String name;
	private int hp;
	
	public Animal(String name,int hp){
		this.name=name;
		this.hp=hp;
	}
	
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		this.hp = hp;
	}
}

class Player extends Animal{
	public Player(String name, int hp) {
		super(name, hp);
	}
}

class Monster extends Animal{
	public Monster(String name, int hp) {
		super(name, hp);
	}
	
}

Ein neues Tier wurde hinzugefügt, das Tier sagt. Dies ist ein Konstruktor, keine Methode, und Sie können den Wert festlegen, wenn Sie ein neues Objekt mit new erstellen. Da es sich nicht um eine Methode handelt, gibt es nach public keinen Typ. Da der Konstruktor nicht vererbt werden kann, wird der Konstruktor auch für Spieler und Monster erstellt. Ich kann den Wert damit nicht festlegen, daher verwende ich etwas namens super (), um den Wert zu setzen. Dies ist am einfachsten, aber die Vererbung selbst ist umständlich und es wird nicht empfohlen, zu viel zu verwenden. Der Grund ist, dass es anfällig für Änderungen ist. Die Java-Vererbung selbst kann nur eine Klasse erben. Wenn Sie mehr als eine erben möchten, ist dies eine Klasse, die B erbt, die A, C erbt, die B erbt, aber auch eine Klasse, die B erbt, die A erbt, und D, D, die B erbt. Wenn dies der Fall ist, kann ein Fehler in der anderen Klasse auftreten, wenn A und B mit der Implementierung einer Klasse übereinstimmen. Selbst wenn Sie den Fehler beheben können, ist es wahrscheinlich, dass Ihr Code schmutzig wird. Daher empfehle ich nicht, die Vererbung zu verwenden. Auf der anderen Seite besteht der Wunsch, den Monstertyp oder den Spielertyp in "Anzeige (Tier Tier)" (sogenannter Polymorphismus) zu setzen. Verwenden wir stattdessen eine Schnittstelle.

Schnittstelle

Battle.java


public class Battle {
	public static void main(String[] args){
		System.out.println("GameStart!");
		Player player=new Player("taro",10);
		display(player);
		
		Monster monster = new Monster("slime",3);
		display(monster);
	}
	
	public static void display(Animal animal) {
		System.out.println(animal.getName());
		System.out.println(animal.getHp());
		System.out.println(animal.getName()+"HP ist"+animal.getHp()+"ist");
	}
	
	
}

interface Animal{
	String getName();
	int getHp();
}

class Player implements Animal{
	private String name;
	private int hp;
	
	public Player(String name,int hp) {
		this.name=name;
		this.hp=hp;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		this.hp = hp;
	}
}

class Monster implements Animal{
	private String name;
	private int hp;
	
	public Monster(String name,int hp) {
		this.name=name;
		this.hp=hp;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getHp() {
		return hp;
	}
	public void setHp(int hp) {
		this.hp = hp;
	}
}

Ich habe die Vererbungsbeziehung einmal gelöscht und eine neue Oberfläche und Implementierungen für Player und Monster hinzugefügt. Der Hauptcode bleibt jedoch derselbe. Dies entspricht der Erweiterung und hat auch eine Klasse namens Animal, sodass der obige Code in Ordnung ist. Es gibt "String getName ()" und "int getHp ()" in der Oberfläche, aber dank dieser Funktion können Sie auch getName (), getHp () usw. in der Hauptanzeige verwenden. Wenn Sie als Schnittstellenfunktion implementieren, müssen Sie auch schreiben, was in der Schnittstelle geschrieben ist. Da diesmal getName () und getHp () geschrieben werden, tritt ein Syntaxfehler auf, wenn diese nicht geschrieben werden. Indem im Gegenteil ein Syntaxfehler verursacht wird, wird garantiert, dass die implementierten immer mit getName () und getHp () funktionieren. Der Unterschied zwischen Vererbung und Schnittstelle ist für mich nicht eindeutig. Es ist mehrdeutig, aber um es zu erklären, denke ich, dass die Vererbung sehr gebunden ist und die Schnittstelle lose gebunden ist.

Dies ist das Ende dieser Zeit. Ich habe es schon lange erklärt, aber wie war es? Ich hoffe, Sie finden es hilfreich.

Recommended Posts

Erste Schritte mit Java 1 Ähnliche Dinge zusammenstellen
Erste Schritte mit Java Basics
Erste Schritte mit Ruby für Java-Ingenieure
Einführung in Java ab 0 Teil 1
Links & Memos für den Einstieg in Java (für mich)
Erste Schritte mit DBUnit
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Erste Schritte mit Swift
Erste Schritte mit Doma-Transaktionen
Erste Schritte mit Java-Programmen mit Visual Studio Code
Erste Schritte mit älteren Java-Ingenieuren (Stream + Lambda)
Erste Schritte mit der Verarbeitung von Doma-Annotationen
Erste Schritte mit JSP & Servlet
Erste Schritte mit Spring Boot
Erste Schritte mit Ruby-Modulen
Erste Schritte mit Java und Erstellen eines Ascii Doc-Editors mit JavaFX
Erste Schritte mit Java_Kapitel 5_Praktische Übungen 5_4
[Google Cloud] Erste Schritte mit Docker
Erste Schritte mit Docker mit VS-Code
Zurück zum Anfang, Erste Schritte mit Java ② Steueranweisungen, Schleifenanweisungen
Erste Schritte mit dem Doma-Criteria API Cheet Sheet
Erste Schritte mit Docker für Mac (Installation)
Einführung in den Parametrisierungstest in JUnit
Erste Schritte mit Ratpack (4) -Routing & Static Content
Beginnen Sie mit der Funktionsweise von JVM GC
Erste Schritte mit dem Language Server Protocol mit LSP4J
Erste Schritte mit maschinellem Lernen mit Spark "Preisschätzung" # 1 Laden von Datensätzen mit Apache Spark (Java)
Erste Schritte mit dem Erstellen von Ressourcenpaketen mit ListResoueceBundle
Erste Schritte mit Java_Kapitel 8_Über "Instanzen" und "Klassen"
Erste Schritte mit Doma-Using Joins mit der Criteira-API
Erste Schritte mit Doma-Einführung in die Kriterien-API
Ich habe versucht, mit Gradle auf Heroku zu beginnen
Zurück zum Anfang und erste Schritte mit Java ① Datentypen und Zugriffsmodifikatoren
Erfahrene Java-Benutzer beginnen mit der Entwicklung von Android-Apps
Beginnen Sie mit serverlosem Java mit dem leichtgewichtigen Framework Micronaut!