プログラミングが好きなあなたのように!
SpringBoot実用的なコースは学習https://edu.csdn.net/course/detail/31433
SpringCloud入門コースを学びhttps://edu.csdn.net/course/detail/31451を
オブジェクト指向シリーズ:
クラスとオブジェクトの
カプセル化は、ポリモーフィック静的キーワードとシングルトンモードインターフェイスおよび内部クラスを
継承します
序文
この記事では、カプセル化の役割から、アクセス修飾子を使用した情報の隠蔽、パッケージの使用まで、オブジェクト指向のカプセル化機能について学習し、最後にオブジェクト間の通信について説明します。
パッケージの特徴
オブジェクト指向には、3つの主要な特徴があります。
- パッケージ
- 継承
- 多形性
オブジェクト指向のメインラインをマスターすることは、上記の3つの特性をマスターすることです。
カプセル化とはカプセル化
という用語には、次の2つの意味があります。
- パッケージ
化コードを全体にラップして、呼び出しとメンテナンスを容易にします - エンクロージャ
情報の非表示、実装の詳細の非表示、およびセキュリティの向上
携帯電話は、部品が梱包されている場合にのみ使用でき、短絡の危険はありません。
カプセル化の利点
- 高いセキュリティ
- 使いやすい
- 高度なメンテナンス
カプセル化の実現
- コードのラップコード
をメソッドにラップし、プロパティとメソッドをクラスにラップし、クラスをパッケージに保存します。 - 情報隠蔽
は、他のクラスから呼び出されたくない特定のプロパティ、メソッド、およびクラスを非表示にします
アクセス修飾子
アクセス修飾子はJavaのキーワードであり、プロパティ、メソッド、およびクラスのアクセススコープを制限するために使用されます。
アクセス修飾子は次のとおりです。
- 公衆
- 民間
- 保護
- デフォルトを書かないでください
アクセス修飾子に対応するアクセススコープ
属性のカプセル化
Javaクラスは通常、プロパティをプライベートとして定義し、プロパティにアクセスして変更するためのパブリックゲッター/セッターメソッドを提供します
private double price;
//返回属性的值
public double getPrice(){
return this.price;
}
//修改属性的值
public void setPrice(double price){
this.price = price;
}
このように書くことの利点:
1)値の範囲はsetメソッドで制御できます
if(price < 0){
System.out.println("价格不能小于0");
this.price = 0;
}else{
this.price = price;
}
2)属性を制御できます:読み取り/書き込み、読み取り専用、書き込み専用
パッケージのカプセル化
バッグとは?
フォルダと同様に、関連する関数を持つクラスは一緒に保存されます。
効果:
- 見つけやすい
- 名前の競合を避ける
パッケージを作成します(パッケージコードはクラスの最初の文である必要があります):
package 包名;
パッケージ内のクラスをインポートします(パッケージ内のクラスをインポートする必要はありません):
import java.util.Scanner; 导入一个类
import java.util.*; 导入包中的所有类
オブジェクト間の通信
Javaプログラムの実行中は、相互に連携するために多数のオブジェクトが必要です。オブジェクトとオブジェクトは相互に呼び出す必要があります。オブジェクトの呼び出しは、多くの場合、パラメータの受け渡しによって実装されます。
LOLでヒーローの相互攻撃をシミュレートします。
ヒーロークラスを書き直します。属性privateを定義し、get \ setメソッドを
定義し、構築メソッドを追加し、攻撃メソッドを定義します。
- 敵を表すヒーローパラメータを追加します
- 攻撃方法では、敵は血液を差し引く必要があります:敵の現在の血液量-現在のヒーローの攻撃力
package com.xray.java7;
/**
* 定义英雄类。
属性:名字、血量、蓝量、攻击力
方法:攻击、移动、回城
*/
public class Hero {
//名字
private String name;
//血量
private int hp;
//蓝量
private int mp;
//攻击力
private int attack;
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;
}
public int getMp() {
return mp;
}
public void setMp(int mp) {
this.mp = mp;
}
public int getAttack() {
return attack;
}
public void setAttack(int attack) {
this.attack = attack;
}
/**
* 無參的構造方法
*/
public Hero(){
System.out.println("調用Hero的無參構造方法");
}
/**
* 有參的構造方法
*/
public Hero(String name,int hp,int mp,int attack){
//使用this關鍵字調用的是屬性
//通過參數給每個屬性賦值
this.name = name;
this.hp = hp;
this.mp = mp;
this.attack = attack;
}
/**
* 攻击敵人
*/
public void attack(Hero enemy){
System.out.println("英雄"+name+"在攻击"+enemy.getName());
//敵人扣血, 設置敵人的血量為敵人當前血量 - 當前英雄的攻擊力
enemy.setHp(enemy.getHp() - this.getAttack());
System.out.println("敵人"+enemy.getName()+"剩餘血量:"+enemy.getHp());
}
/**
* 移动
*/
public void move(){
System.out.println("英雄"+name+",攻击力"+attack+"在移动!");
}
/**
* 回城
*/
public void back(){
System.out.println("英雄"+name+"血量"+hp+",蓝量"+mp+",回城了!");
}
}
public class TestHero {
public static void main(String[] args) {
//創建兩個英雄
Hero hero1 = new Hero("提莫",400,200,80);
Hero hero2 = new Hero("劍聖",300,300,100);
//兩個英雄跑過來
hero1.move();
hero2.move();
//互相進行攻擊
hero1.attack(hero2);
hero2.attack(hero1);
//回城
hero1.back();
hero2.back();
}
}
終わり
この記事の終わりに、今回の仕事は、
ウルトラマンがモンスターと戦うゲームシーンをアップグレードすることです。ウルトラマンには、名前、攻撃力、血液量などの属性があります。飛行、軽い攻撃、
モンスターには名前、攻撃力、血液量の属性:ランニング、ブルートフォースアタックなどのスキルがあります。
ウルトラマンとモンスターオブジェクトの相互攻撃をシミュレートします。
要件:
1。片方が死ぬまでウルトラマンにモンスターと戦わせます
。2 。モンスターにリフレクション攻撃スキルを追加します。このスキルは、モンスターが攻撃されたときに呼び出され、相手の攻撃力の10%を相手に反映します。
他のJavaの知識を学ぶ必要がある場合は、ここでJavaの概要に関する非常に詳細な知識を調べてください。