上次博客中学习了类与对象,这次便用其来描述一个乌鸦喝水的案例吧!
1、场景简介:
一只乌鸦口渴了,到处找水喝。乌鸦看见一个瓶子,瓶子里有水。可是瓶子里水不多,瓶口又小,乌鸦喝不着水,怎么办呢?
乌鸦看见旁边有许多小石子,想出办法来了。
乌鸦把小石子一个一个地放进瓶子里。瓶子里的水渐渐升高,乌鸦就喝着水了
2、对象分析
- 将故事中的场景、对象简化,抽象出实体。
主要有乌鸦、水瓶、石头。各自属性以及方法如下:
对象 | 属性 | 方法 |
---|---|---|
乌鸦 | 名字、(被叼的)石头、(盛水的)水瓶 | 叼石头 |
水瓶 | 编号、瓶高、底面积、水位高 | …… |
石头 | 编号、数量、大小 | …… |
- 不同对象之间的关系以及方法步骤如下:
3、 对象创建
本次对石头、水瓶、乌鸦等的属性需要进行一个预设,这样便不需要在主方法中对石头、水瓶、乌鸦等类的各个具体对象的属性再依次赋值,而是在新建类的对象时直接给出其具体参数,即在创建对象的时候,给对象进行初始化的操作。
下面介绍构造方法的使用。
3.1 构造方法
需要用到的基本语法是构造方法。其基本格式如下:
创建对象的格式:
类名 对象名 = new 类名(构造方法);
创建构造方法的格式:
public 类名(参数类型 参数名, ……) {
需要执行的内容 }
注意:
- 系统会给没有构造方法的类,自动提供一个无参的构造方法。
- 变量的作用域在自己所属的代码块中,局部变量和属性同名,则局部变量优先显示。
- this指的是当前类的自己对象。
3.2 类的创建
根据上述分析,给出石头、水瓶、乌鸦等类的 创建。主要代码如下:
- 石头类的创建
public class stone {
//属性
public String name;
public double size;
public double number;
//方法
public stone(String name,double size,double number){
this.name = name;
this.size = size;
this.number = number;
}
}
- 水瓶类的创建
public class bottle {
//属性
public String name;
public double waterlevel;
public double basearea;
public double height;
//构造方法
public bottle(String name,double waterlevel,double height,double basearea ){
this.name = name;
this.height = height;
this.waterlevel = waterlevel;
this.basearea = basearea;
}
}
- 乌鸦类的创建
public class crow {
//属性
public String name;
public String pickstone;
public String waterbottle;
//构造方法
public crow(String name,String pickstone,String waterbottle){
this.name = name;
this.pickstone = pickstone;
this.waterbottle = waterbottle;
}
//方法:叼石头
public void pickupstones(stone astone, bottle abottle){
int i;
//判断水位是否达标?
for(i = 1;i < astone.number; i++){
//乌鸦叼石头,石头数量减少,水瓶水位升高
astone.number --;
abottle.waterlevel += (astone.size/abottle.basearea);
//控制小数点位数
DecimalFormat df = new DecimalFormat("0.00");
String astonesize = df.format(astone.size);
String waterlevel = df.format(abottle.waterlevel);
//输出
System.out.println();
System.out.println("这回石头大小是"+astonesize);
System.out.println("乌鸦叼了"+i+"颗石头,现在石头数量还有"+astone.number+"颗,水位是"+waterlevel);
}
}
}
4、主方法调用以及结果
编辑主方法,创建对象,赋值,并求解如下:
public static void main(String[] args){
//创建乌鸦、石头、水瓶等对象;
double r = Math.random();
stone thestone = new stone("thestone",r,20);
bottle abottle = new bottle("astone",1,10,6);
crow acrow = new crow("acrow","astone","abottle");
//乌鸦叼石头来喝水
if(abottle.waterlevel <= (abottle.height-2)){
acrow.pickupstones(thestone,abottle);
}
}
最终结果如下:
可怜的乌鸦没有喝到水。。。
5、 总结
本次所采用的石头、水瓶等数值都是随机设置,并不强具有代表标性。另外,还可以试着把场景再复杂化,增大训练难度。游戏的搭建便是一个个场景的切换。
本篇仅为关于类与对象中“构造方法”的学习总结,欢迎小伙伴们的批评指正和热情点赞!!!