类和对象
设计英雄这个类
比如,他们都有名字,hp,护甲,移动速度等等
这样我们就可以设计一种东西,叫做类,代表英雄这样一种事物
类: 英雄(Hero)
状态: 名字, 血量,护甲,移动速度
注: 本例用到了3种数据类型 分别是 String(字符串),float(浮点数), int(整数)
注: 这个类没有主方法,不要试图运行它。 并不是所有的类都是有主方法的。
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
}
创建具体英雄
类就像一个模板,根据这样一个模板,可以创建一个个的具体的英雄
一个个具体的英雄,就叫一个个的对象
new Hero() 就是java中创建一个英雄对象的意思
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
garen.hp = 616.28f;
garen.armor = 27.536f;
garen.moveSpeed = 350;
Hero teemo = new Hero();
teemo.name = "提莫";
teemo.hp = 383f;
teemo.armor = 14f;
teemo.moveSpeed = 330;
}
}
类的第一个字母大写
好的编程习惯会让代码看上去更清爽,易读,容易维护
比如类的第一个字母大写
Hero
练习
设计出物品这种类
类名:Item
物品有如下属性:
名字 name 类型是字符串String
价格 price 类型是整型 int
创建(实例化)3件具体物品
名称 价格
血瓶 50
草鞋 300
长剑 350
package lianxi;
public class item {
String name;//物品名称
int price;//物品价格
public static void main(String[] args) {
item xueping=new item();
xueping.name="血瓶";
xueping.price=50;
item caoxie=new item();
caoxie.name="草鞋";
caoxie.price=300;
}
}
属性
属性的类型
属性的类型可以是基本类型,比如int整数,float 浮点数
也可以是类类型,比如String 字符串
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
}
属性名称
属性名称一般来说,都是小写
比如name
如果有多个单词组成,后面的单词的第一个字母大写
比如 moveSpeed
属性也是变量,所以需要满足 变量的命名规则
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
}
练习
一个英雄可以有名称,血量,护甲,移动速度,还有 其他你想到的,作为新的属性,加入到英雄上面
比如
送了多少次
杀人次数
助攻次数
金钱
补刀数
攻击速度
杀人后说的话
被杀后说的话
public class LOLHero {
String name; //姓名
String killer; //杀人说话
String killed; //被杀说话
int kills; //杀人次数
int assists; //助攻次数
int death; //死亡次数
int killSoldiers; //补刀数
int money; //金币
int moveSpeed; //移动速度
int Crit; //暴击伤害
int lenth; //攻击距离
float attackSpeed; //攻击速度
float physicalAttack; //物理伤害
float magicAttack; //魔法伤害
float hp; //血量
float mp; //蓝量
float armor; //护甲
float magicResistance; //魔抗
public static void main(String[] args) {
LOLHero Yaso = new LOLHero();
Yaso.name = "疾风剑豪";
Yaso.killer = "死亡如风,常伴吾身";
Yaso.killed = "快乐就完事儿了!";
Yaso.kills = 0;
Yaso.assists = 0;
Yaso.death = 18;
Yaso.killSoldiers = 520;
Yaso.money = 3600;
Yaso.moveSpeed = 760;
Yaso.Crit = 100;
Yaso.lenth = 360;
Yaso.attackSpeed = 2.50f;
Yaso.physicalAttack = 666.6f;
Yaso.magicAttack = 0f;
Yaso.hp = 1672f;
Yaso.mp = 0f;
Yaso.armor = 78f;
Yaso.magicResistance = 106f;
}
}
方法
什么是方法
每个英雄。。。。都可以坑
所以为Hero这个类,设计一个方法: keng
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//坑队友
void keng(){
System.out.println("坑队友!");
}
}
方法返回类型
有的方法是有返回类型的
比如方法:
float getArmor(){
return armor;
}
这个方法是用来获取一个英雄有多少护甲的,返回类型是float
有的方法不需要返回值,这个时候就把返回类型设置为void,表示该方法不返回任何值
比如方法 “坑队友”
void keng(){
System.out.println("坑队友!");
}
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//获取护甲值
float getArmor(){
return armor;
}
//坑队友
void keng(){
System.out.println("坑队友!");
}
}
方法的参数
英雄在一些特定情况下,可以增加移动速度
这样我们就通过addSpeed这个方法增加移动速度
void addSpeed(int speed){
//在原来的基础上增加移动速度
moveSpeed = moveSpeed + speed;
}
int speed 叫做方法的参数
给盖伦增加100的移动速度:
Hero garen = new Hero();
garen.name = "盖伦";
garen.moveSpeed = 350;
garen.addSpeed(100);
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//坑队友
void keng(){
System.out.println("坑队友!");
}
//获取护甲值
float getArmor(){
return armor;
}
//增加移动速度
void addSpeed(int speed){
//在原来的基础上增加移动速度
moveSpeed = moveSpeed + speed;
}
public static void main(String[] args) {
Hero garen = new Hero();
garen.name = "盖伦";
garen.moveSpeed = 350;
garen.addSpeed(100);
}
}
方法的命名
方法是一个类的动作行为,所以一般都是以动词开头的,比如 keng …
如果有多个单词,后面的每个单词的第一个字母使用大写
比如 addSpeed
public class Hero {
String name; //姓名
float hp; //血量
float armor; //护甲
int moveSpeed; //移动速度
//坑队友
void keng(){
System.out.println("坑队友!");
}
//获取护甲值
float getArmor(){
return armor;
}
//增加移动速度
void addSpeed(int speed){
//在原来的基础上增加移动速度
moveSpeed = moveSpeed + speed;
}
}
练习
为英雄类Hero设计几个新的方法:
- 超神 legendary(),无参数,无返回类型
- 获取当前的血量 getHp(), 无参数,有float类型的返回值
- 回血 recovery(float blood), 有参数 float类型参数 blood表示本次恢复的血量,无返回类型
public class Test {
public static void main(String[] args) {
//创建英雄对象
Hero galen = new Hero();
//给对象赋值
galen.name = "盖伦";
galen.hp = 500;
//调用方法
galen.legendary();
galen.getHp();
galen.recovery(101);
}
}
//英雄类
class Hero{
String name;//英雄名字
float hp;//英雄血量
//超神方法
public void legendary(){
System.out.println(this.name + "超神了!");
}
//获取当前血量方法
public float getHp(){
System.out.println("当前血量:" + this.hp);
return hp;
}
//回血方法
public void recovery(float blood){
System.out.println("本次回复血量:" + blood);
System.out.println("恢复后血量:" + (this.hp + blood));
}
}