`
淡淡淡的天空
  • 浏览: 7922 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

类和对象——以一个初学者的角度

阅读更多
    在面向对象程序设计中,类是一个抽象的概念,描述的是一类事物的完备信息,它将具有相同属性和行为(方法)的对象组成一个集合。类在现实生活中类似于蓝图或者模板,根据蓝图或者模板可以创造出具体的事物。例如:学生是一个类,具体某个学生张三就是该类中的一个对象。由此可见,类是Java程序的基本要素,并且所有的内容都必须要依赖于类才能存在。
    生活中也有类和对象。现实生活中只要是具体的一个物体或者具体的一件事情就是一个对象,也即是你眼睛所看到的任何一个物体,所想所做的任何一个事情都是一个对象。而根据对象相似的特征和相似的行为(方法)进行归类便可以形成一个个抽象的类。然而Java程序中的类是根据生活中对象(类)的特征和行为(功能)按照一种固定格式进行的定义的模板,通过这个模板我们可以建立多个具有不同属性和不同行为(方法)的对象。
    Java程序中的类含有两个部分,属性(变量),方法(函数),定义类的格式如下:
    public class 类名 {
//属性的格式
           访问修饰符 数据类型 属性名;

//方法的格式
访问修饰符 返回值类型 方法名([数据类型 参数名,...]){
         //代码
}
}
    接下来我们看一个实例:回合制对战游戏:奥特曼和小怪兽要进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
    首先找出所有的对象,然后根据对象定义类,最后再写一个主函数,创建对象并调用方法。
    1.对象
奥特曼
特征:姓名,攻击力,血量
行为:设置姓名,获取姓名,设置攻击力,获取攻击力,设置血量,获取血量,攻击小怪兽
小怪兽
特征:姓名,攻击力,血量
行为:设置姓名,获取姓名,设置攻击力,获取攻击力,设置血量,获取血量,攻击奥特曼

    2.定义类,属性和方法
有几个对象就定义几个类
    3.类:主函数中:创建对象和调用方法
创建奥特曼类:
    public class Aoteman{
private String name;
private int strength;
private int blood;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public void flight(Xiaoguaishou x){
x.setBlood(x.getBlood()-getStrength());
System.out.println(x.getName()+"被"+name+"攻击了,剩余的血量是"+x.getBlood());
if (x.getBlood()<=0)
System.out.println(name+"胜利了");
}
}
    创建小怪兽类:
    public class Xiaoguaishou{
private String name;
private int strength;
private int blood;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public void flight(Aoteman a){
a.setBlood(a.getBlood()-getStrength());
System.out.println(a.getName()+"被"+name+"攻击了,剩余的血量是"+a.getBlood());
if (a.getBlood()<=0)
System.out.println(name+"胜利了");
}
}
    写主函数,创建对象调用方法:
    public class Flight{
public static void main(String[] args){
Aoteman a=new Aoteman();
a.setName("奥特曼");
a.getName();
a.setStrength(10);
a.getStrength();
a.setBlood(60);
a.getBlood();
Xiaoguaishou x=new Xiaoguaishou();
x.setName("小怪兽");
x.getName();
x.setStrength(10);
x.getStrength();
x.setBlood(50);
x.getBlood();
while(a.getBlood()>0&&x.getBlood()>0)
{a.flight(x);
x.flight(a);}
}
}
    构造方法是用来实例化对象,给属性赋初始值。当用new创建一个对象的时候构造方法就会被调用。在一个类中如果没有定义任何构造方法,系统就会为该类自动创建一个无参的构造方法,且方法体中没有任何语句,而当显式定义类的构造方法后,系统就不再自动创建默认的构造方法。
    构造方法是一个特殊的方法。Java中的每个类都有构造方法,用来初始化该类的一个对象的构造方法具有和类名相同的名称,而且不返回任何数据类型,构造方法一般都用public类型类修饰,这样才能在任意的位置创建类的实例。构造方法每使用一次就会创建一个新对象,而普通方法只要调用的对象不变,那么还是同一个方法。
    方法重载就是在同一个类或者父子类之间创建同名的多个方法,这些方法有不同的参数列表,所谓不同的参数列表及时指方法所带的参数个数,参数类型,参数顺序至少要有一个不同。
    this表示的是当前调用方法的对象,类似于生活中的"我"。
    接下来看一个实例:奥特曼和小怪兽要进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!胜利的一方满血复活。胜利的一方要和Boss进行PK,直到一方的血量为0时结束战斗,输出谁胜利了!
    首先创建奥特曼类并重载攻击方法,因为奥特曼不止要攻击小怪兽,如果他赢了还要攻击Boss(并采用随机数生成攻击力,使得结果具有不确定性):
    public class Aoteman{
private String name;
private int strength;
private int blood;
java.util.Random rand = new java.util.Random();
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public  void flight(Xiaoguaishou x){
x.setBlood(x.getBlood()-rand.nextInt(getStrength()));
System.out.println(x.getName()+"被"+name+"攻击了,剩余的血量是"+x.getBlood());
if (x.getBlood()<=0)
System.out.println(name+"胜利了");
}
public  void flight(Boss b){
b.setBlood(b.getBlood()-rand.nextInt(getStrength()));
System.out.println(b.getName()+"被"+name+"攻击了,剩余的血量是"+b.getBlood());
if (b.getBlood()<=0)
System.out.println(name+"胜利了");
}
}
    接着创建小怪兽类和Boss类,具体方法和创建奥特曼类相似:
    public class Xiaoguaishou{
private String name;
private int strength;
private int blood;


java.util.Random rand = new java.util.Random();
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public void flight(Aoteman a){
a.setBlood(a.getBlood()-rand.nextInt(getStrength()));
System.out.println(a.getName()+"被"+name+"攻击了,剩余的血量是"+a.getBlood());
if (a.getBlood()<=0)
System.out.println(name+"胜利了");
}
public void flight(Boss b){
b.setBlood(b.getBlood()-rand.nextInt(getStrength()));
System.out.println(b.getName()+"被"+name+"攻击了,剩余的血量是"+b.getBlood());
if (b.getBlood()<=0)
System.out.println(name+"胜利了");
}
}

    public class Boss{
private String name;
private int strength;
private int blood;
java.util.Random rand=new java.util.Random();


public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setStrength(int strength){
this.strength=strength;
}
public int getStrength(){
return strength;
}
public void setBlood(int blood){
this.blood=blood;
}
public int getBlood(){
return blood;
}

public void flight(Aoteman a){
a.setBlood(a.getBlood()-rand.nextInt(getStrength()));
System.out.println(a.getName()+"被"+name+"攻击了,剩余的血量是"+a.getBlood());
if (a.getBlood()<=0)
System.out.println(name+"胜利了");
}
public void flight(Xiaoguaishou x){
x.setBlood(x.getBlood()-rand.nextInt(getStrength()));
System.out.println(x.getName()+"被"+name+"攻击了,剩余的血量是"+x.getBlood());
if (x.getBlood()<=0)
System.out.println(name+"胜利了");
}
}
    最后写主函数,创建对象并调用攻击方法:
    public class Flight{
public static void main(String[] args){
Aoteman a=new Aoteman();
a.setName("奥特曼");
a.getName();
a.setStrength(10);
a.getStrength();
a.setBlood(50);
a.getBlood();
Xiaoguaishou x=new Xiaoguaishou();
x.setName("小怪兽");
x.getName();
x.setStrength(10);
x.getStrength();
x.setBlood(50);
x.getBlood();
Boss b=new Boss();
b.setName("Boss");
b.getName();
b.setStrength(10);
b.getStrength();
b.setBlood(50);
b.getBlood();
while(a.getBlood()>0&&x.getBlood()>0){
a.flight(x);
x.flight(a);
}

if(a.getBlood()<=0&&x.getBlood()>0){
x.setBlood(50);
while(x.getBlood()>0&&b.getBlood()>0)
{x.flight(b);
b.flight(x);}}
else if(x.getBlood()<=0&&a.getBlood()>0){
a.setBlood(50);
while(a.getBlood()>0&&b.getBlood()>0)
{a.flight(b);
b.flight(a);}
}
}
}
  • 大小: 9.4 KB
  • 大小: 33 KB
  • 大小: 30.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics