為熱愛編程的你點贊!
學習SpringBoot實戰課程 https://edu.csdn.net/course/detail/31433
學習SpringCloud入門課程 https://edu.csdn.net/course/detail/31451
前言
本文帶大家深入學習面向物件的封裝特性,從封裝的作用,到利用訪問修飾符進行資訊隱藏,再到包的使用,最后將探討物件之間的通信,
封裝特性
面向物件有三大特性,分別是
- 封裝
- 繼承
- 多型
掌握面向物件的主線,就是掌握以上三大特性,
什么是封裝
封裝這個詞語,包含兩層含義:
- 包裝
將代碼包裝起來成為整體,方便呼叫和維護 - 封閉
資訊的隱藏,將實作的細節隱藏起來,提高安全性
手機只有把零件封裝起來用戶才能使用,也不會有短路的危險,

封裝的好處
- 安全性高
- 使用方便
- 維護性高
封裝的實作
- 包裝代碼
將代碼包裝到方法中,將屬性和方法包裝到類中,將類保存到包中… - 資訊隱藏
隱藏某些不想被其他類呼叫的屬性、方法和類
訪問修飾符
訪問修飾符是Java中的關鍵字,用于限制屬性、方法、類的訪問范圍
訪問修飾符有:
- public 公開
- private 私有
- protected 保護
- 不寫 默認
訪問修飾符對應的訪問范圍

屬性的封裝
Java類中一般將屬性定義為私有的,然后提供公開的getter/setter方法對屬性進行訪問和修改
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代碼必須是類中的第一句):
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反射給對方,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/246826.html
標籤:java
