实验4.1 对象的组合(1)
【实验目的】掌握使用对象的组合关系。
【实验要求】编写一个Java应用程序,包含三个类用于计算圆锥的体积。
【实验步骤】
代码:
Circle.java
public class Circle {
double radius,area; //“圆”的半径,面积
void setRadius(double r) { //修改半径
radius=r;
}
double getRadius() { //获得半径
return radius;
}
double getArea(){ //求面积
area=3.14*radius*radius;
return area;
}
}
Circular.java
public class Circular {
Circle bottom; //Circular将Circle对象作为自己的“底”
double height; //圆锥的高
void setBottom(Circle c) {
bottom = c; //将“圆”对象c的引用传递给“圆锥”对象的成员bottom
}
void setHeight(double h) {
height = h;
}
double getVolme() { //圆锥体积
if(bottom == null)
return -1;
else
return bottom.getArea()*height/3.0;
}
double getBottomRadius() { // 获得圆锥底部的半径
return bottom.getRadius();
}
public void setBottomRadius(double r){ //修改圆锥底部的半径
bottom.setRadius(r);
}
}
Example4_8.java
public class Example4_8 {
public static void main(String args[]) {
Circle circle = new Circle(); //创建 circle对象(圆)
circle.setRadius(10); //圆的radius(半径)为10
Circular circular = new Circular(); //创建 circular对象(圆锥)
System.out.println("circle的引用:"+circle);
System.out.println("圆锥的bottom的引用:"+circular.bottom);
circular.setHeight(5); //修改圆锥的height(高)为5
circular.setBottom(circle); //将circle的引用传递给circular的bottom(底)
System.out.println("circle的引用:"+circle);
System.out.println("圆锥的bottom的引用:"+circular.bottom);
System.out.println("圆锥的体积:"+circular.getVolme());
System.out.println("修改circle的半径,bottom的半径同样变化");
circle.setRadius(20); //修改圆的radius(半径)为20
System.out.println("bottom的半径:"+circular.getBottomRadius());
System.out.println("重新创建circle,cirlce的引用将发生变化");
circle = new Circle(); //重新创建circle
System.out.println("circle的引用:"+circle);
System.out.println("但是不影响circular的bottom的引用");
System.out.println("圆锥的bottom的引用:"+circular.bottom);
}
}
运行结果:
实验4.1 对象的组合(2)
【实验目的】掌握使用对象的组合关系。
【实验要求】编写一个Java应用程序,包含三个类用于模拟手机和SIM卡的组合关系。
【实验步骤】
运行代码:
MobileTelephone.java
public class MobileTelephone {
SIM sim; //组合SIM卡对象
void setSIM(SIM card) {
sim = card;
}
long lookNumber(){
return sim.getNumber(); //委托所包含的sim对象调用其方法
}
}
SIM.java
public class SIM {
long number;
SIM(long number){
this.number = number;
}
long getNumber() {
return number;
}
}
Example4_9.java
public class Example4_9 {
public static void main(String args[]) {
SIM simOne = new SIM(13889776509L); //创建SIM卡对象实例simOne
MobileTelephone mobile = new MobileTelephone(); //创建手机对象实例
mobile.setSIM(simOne); //委托mobile对象调用其方法,并传递参数(card ,卡号)
System.out.println("手机号码:"+mobile.lookNumber());
SIM simTwo = new SIM(15967563567L); //创建第二个SIM卡对象实例simTwo
mobile.setSIM(simTwo); //委托mobile对象调用其方法,并传递参数(card ,卡号)
System.out.println("手机号码:"+mobile.lookNumber());
}
}
运行结果:
实验4.2 共饮同井水
【实验目的】掌握类变量与实例变量,以及类方法与实例方法的区别。
【实验要求】编写程序模拟两个村庄共用同一口井水。类Village 有一个静态变量waterAmount,用于模拟井水的水量。主类Land中创建两个村庄,一个村庄改变了waterAmount的值,另一个村庄查看waterAmount的值。
【实验步骤】
运行代码:
Village.java
public class Village {
static int waterAmount; //模拟水井的水量
int peopleNumber; //村庄的人数
String name; //村庄的名字
Village(String s) {
name = s;
}
static void setWaterAmount(int m) {
if(m>0)
waterAmount = m;
}
void drinkWater(int n){
if( waterAmount-n>=0) {
waterAmount = waterAmount-n;
System.out.println(name+"喝了"+n+"升水");
}
else
waterAmount = 0;
}
public static int waterAmount() {
// TODO Auto-generated method stub
return waterAmount;
}
static int lookWaterAmount() {
return waterAmount;
}
void setPeopleNumber(int n) {
peopleNumber = n;
}
int getPeopleNumber() {
return peopleNumber;
}
}
Land.java
public class Land {
public static void main(String args[]) {
Village.setWaterAmount(200); //用类名调用setWaterAmount(int m),并向参数传值200
int leftWater = Village.waterAmount(); //用Village类的类名访问waterAmount
System.out.println("水井中有 "+leftWater+" 升水");
Village zhaoZhuang,maJiaHeZhi;
zhaoZhuang = new Village("赵庄");
maJiaHeZhi = new Village("马家河子");
zhaoZhuang.setPeopleNumber(80);
maJiaHeZhi.setPeopleNumber(120);
zhaoZhuang.drinkWater(50); //zhaoZhuang调用drinkWater(int n),并向参数传值50
leftWater = maJiaHeZhi.lookWaterAmount(); //maJiaHeZhi调用lookWaterAmount()方法
String name=;
System.out.println(name+"发现水井中有 "+leftWater+" 升水");
maJiaHeZhi.drinkWater(100);
leftWater = zhaoZhuang.lookWaterAmount(); //zhaoZhuang调用lookWaterAmount()方法
name=;
System.out.println(name+"发现水井中有 "+leftWater+" 升水");
int peopleNumber = zhaoZhuang.getPeopleNumber();
System.out.println("赵庄的人口:"+peopleNumber);
peopleNumber = maJiaHeZhi.getPeopleNumber();
System.out.println("马家河子的人口:"+peopleNumber);
}
}
运行结果: