概念:
类:具有相同特征(属性)和功能、行为(方法)的对象归为一类。
对象:一类事物的某个具体实例。
格式:类的创建 public class 类名 {}
类的属性的定义 public 属性类型 属性名;
类的方法的定义 public 方法返回值类型 方法名 (类型参数 参数名,....){ 方法体,方法执行的内容} 参数:方法需要使用的外部条件。
使用:对象名.属性 对象名.方法体(参数值,......);
采用面向对象开发优点:符合程序员开发思维,便于开发。
难点:从场景中建模,提取需要的类,以及类的属性和方法。
例子:
场景:学生在学习java课程,每次学习让课程的课时减少1,重复学习,直到课程的课时减少为0结束,学习完成,学生的学分增加java课程的学分。
第一步:分析场景中的对象: Java课程 学生
第二步:分析对象的属性和方法: Java课程 属性:课时,学分,课程名 方法:\
学生 属性:姓名,学分 方法:学习 参数:课程对象 方法体:1.让课程课时减少1 2.判断是否完成学习 3.获得学分
第三步:创建类
第四步:在主方法中创建对象,按场景调用方法。
例子:
Hero.java文件
public class Hero {
private String name;
private int blood;
private int attackValue;
public int getBlood() {
return blood;
}
public void setBlood(int blood) {
this.blood = blood;
}
public int getAttackValue() {
return attackValue;
}
public void setAttackValue(int attackValue) {
this.attackValue = attackValue;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Hero() {
}
public Hero(String name,int blood,int attackValue) {
this.name = name;
this.blood = blood;
this.attackValue = attackValue;
}
public void attack(Hero h) {
this.blood = blood - h.attackValue;
if(blood<=0) blood = 0;
System.out.println(h.name+"攻击了"+name+","+name+"减少了"+h.attackValue+"血量,"+name+"当前血量为"+blood);
if(blood==0) {
System.out.println(name+"死亡了。"+h.name+"胜利,当前血量 为"+h.blood);
return;
}
}
}
TestHero.java文件
public class TestHero {
public static void main(String[] args) {
Hero h1 = new Hero("韩信",110,10);
Hero h2 = new Hero("盖伦",100,10);
while(h1.getBlood()>0 && h2.getBlood()>0) {
h1.attack(h2);
if(h1.getBlood()<=0) break;
h2.attack(h1);
}
}
}
输出:
盖伦攻击了韩信,韩信减少了18血量,韩信当前血量为92
韩信攻击了盖伦,盖伦减少了20血量,盖伦当前血量为80
盖伦攻击了韩信,韩信减少了18血量,韩信当前血量为74
韩信攻击了盖伦,盖伦减少了20血量,盖伦当前血量为60
盖伦攻击了韩信,韩信减少了18血量,韩信当前血量为56
韩信攻击了盖伦,盖伦减少了20血量,盖伦当前血量为40
盖伦攻击了韩信,韩信减少了18血量,韩信当前血量为38
韩信攻击了盖伦,盖伦减少了20血量,盖伦当前血量为20
盖伦攻击了韩信,韩信减少了18血量,韩信当前血量为20
韩信攻击了盖伦,盖伦减少了20血量,盖伦当前血量为0
盖伦死亡了。韩信胜利,当前血量 为20
总结:采用面向对象,便于开发,要会提取场景中的对象,属性,方法。从面向过程思维向面向对象思维过渡。