大象进冰箱案例学习Java面向对像及源代码(一)

大象进冰箱案例学习Java(一)

  • 通过大象进冰箱案例学习Java面向对象思想第一版
    • 最简单的类
      • IceBox.java
      • Elephant.java
      • Person.java
      • Action.java
      • Client.java
    • 一些简单技巧

通过大象进冰箱案例学习Java面向对象思想第一版

我们这学期开始学Java语言,上课老师讲的有点快,所以总是跟不上老师!造成好多东西都不理解。学习Java时,有一个很经典的例子就是大象进冰箱,我学习时,总是不知道怎么写,很想去看一些比较完整的demo去学习一下 ,但总是找不到。今天花了一下午又重新看了下,感觉有点理解了,所以想把自己的代码写出来,虽然不太好,但是大家也可以参考一下。

最简单的类

如果大家学习这个例子,相信大家都已经知道什么是类了。所以我就直接开始了。
我们这个例子用到5个类,分别是:

  1. Elephant.java
  2. IceBox.java
  3. Person.java
  4. Action.java
  5. Client.java

下边我就把这些代码贴出来吧(其中有些是我在学习时老师让敲的注释,我没删,可能会有点用)

IceBox.java

package 第三章.1;

public class IceBox {
	
	private String name;	//private表示私有,只能在本类中使用
	double width,height;	 
							
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public IceBox(String name) {
		super();
		this.name = name;
	}

	public double getWidth() {
		return width;
	}

	public void setWidth(double width) {
		this.width = width;
	}

	public double getHeight() {
		return height;
	}

	public void setHeight(double height) {
		this.height = height;
	}
	
	public void open() {
		System.out.println(this.name+"门被打开");
	}
	
	public void close() {
		System.out.println(this.name+"门被关闭");
	}

}

Elephant.java

package 第三章.1;
public class Elephant { //现场有几个相关实体,就定义几个相关类,每个类都要有自己的任务,都要干事(方法function)
						//导演,屏幕不相干,所以就不定义类
	
	private double width,height; //方法中用到的 、本类的、某个对象的属性的数值,因为方法是处理数据的
								 //象牙有多长,腿多粗,什么基因跟enter没有关系,所以不定义
	private IceBox aIceBox;   //对象声明的方法,类名 对象名 ,跟int i;是一个意思;
							//与局部变量不同的是;在方法外定义,可以穿透任何方法,进入任何方法
							//局部变量只能在方法内部定义,必须赋值,而此处叫成员变量可以不赋值,有默认值。int  0;double 0.0
							//boolean:false
	private String name;

	public Elephant(String name) {
		super();
		this.name = name;
	}
	public String getName() {			//因为我们在这里声明的是private的变量,所以只能是通过set 和 get 方法来设置和获取变量的值
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getWidth() {
		return width;
	}
	public void setWidth(double width) {//方法的参数变量,用于方法中传参
		this.width = width;				//参数变量width是this.width = width; 中的=后面的width
	}									//this.width = width 中=左边的width是成员变量width
										//双击this.width中的width会看到上面的两个width变成深色
	//要给某个类的成员变量赋值,就要用这个类的对象调用成员方法set。比如此处,aElephant.getWidth(1.5);
	//aElehant.getWidth() 就会变成1.5,this就是本类的一个对象的意思
	//到哪去调用呢?到main()方法中去调用

	public double getHeight() { //get方法被对象调用,最终变成一个值。比如:
		return height;			//get方法要有返回值,方法中要有return语句。
	}

	public void setHeight(double height) {//set方法被对象调用,将参数传入,将参数传给本类的对象
		this.height = height;			//参数变量的值,传给了成员变量
	}
	public IceBox getaIceBox() {
		return aIceBox;
	}
	public void setaIceBox(IceBox aIceBox) {
		this.aIceBox = aIceBox;
	}
	public void enter() {
		if((width<aIceBox.width)&&(height<aIceBox.height)) {
			System.out.println(this.name+"笨重地进入");
			System.out.println(this.name+"的尺寸:");
			System.out.println(width);
			System.out.println(height);
			
			System.out.println(aIceBox.getName()+"的尺寸:");
			System.out.println(aIceBox.width);
			System.out.println(aIceBox.height);
		}
		//变量3种:成员变量、参数变量、局部变量。作用:成员变量是对象的属性。参数变量为方法传参。局部 变量在方法中临时使用。
		//声明位置:成员变量在所有的方法之外,参数变量在方法后面的括号中,局部变量在方法中。赋值:成员变量不比赋值,有默认值。
		//参数变量在main()方法中传入数值。局部变量在方法中必须赋值。
	}
}

Person.java

package 第三章.1;

public class Person {		//人的属性与大象进冰箱没有关系,所以不定义成员变量,只定义成员方法

	private String name;
	public Person(String name) {
		super();
		this.name = name;
	}
	
	public void pull() {//平常我们说的开门关门,那么开门和关门是定义在冰箱还是人类中呢?
		//原则:开门 用到的尺寸属于哪个类,就定义在哪个类里面。这里属于冰箱,所以开关门的方法定义在冰箱中。而不是人这个类中。
		//再比如:购物车中买两支钢笔,钢笔数量可以加1,但是钢笔的种类并不加1
		
		System.out.println(this.name+"拉门");
	}
	
	public void push() {
		System.out.println(this.name+"推门");
	}

}

Action.java

package 第三章.1;

public class Action {//剧本里有三个实体,所以三个实体类的变量在这里都要声明
					//每个系统都要包括实体类,以及将众多实体类串起来
	private Elephant aElephant; //注意:这里都是变量,不是对象
	private IceBox aIceBox;
	private Person aPerson;
	//我认为难点就是在这声明的这个三个对象中,我之前搞不懂得就是在这里;
	//首先声明出来三个对象型变量,因为访问修饰符设置的是private,所以我们还是需要用set 和 get 方法去设置这个值
	private String name;
	public Action(String name) {	//用于在Client.java中为这个action设置名字
		super();
		this.name = name;
	}
	public Elephant getaElephant() {
		return aElephant;
	}
	
	public void setaElephant(Elephant aElephant) {
		this.aElephant = aElephant;
	}
	public IceBox getaIceBox() {
		return aIceBox;
	}
	public void setaIceBox(IceBox aIceBox) {
		this.aIceBox = aIceBox;
	}
	public Person getaPerson() {
		return aPerson;
	}
	public void setaPerson(Person aPerson) {
		this.aPerson = aPerson;
	}
	
	public void action() {
		aPerson.pull();
		aIceBox.open();
		aElephant.enter();
		aPerson.push();
		aIceBox.close();
	}
}

Client.java

学过编程的都知道程序的知道,一个程序的入口是Main函数,下面这个文件就是我们的客户端程序了

package 第三章.1;

public class Client {//给main方法一个单独的类,作为 Java成 程序的入口,或客户端、测试
					 //客户端类中,main方法外不能写代码,只在main中写代码
					 //main方法的作用之一就是是给所有的成员变量赋值,比如用户名,密码
	public static void main(String[] args) {  //main+alt+/
											  //main方法中具体指各个实体,变量取值
											  //main方法先调用过程类Action,
		// TODO Auto-generated method stub
		Action aAction;
		Elephant taiguoxiang;
		IceBox xinfeibingxiang;
		Person lurenjia;
		
		aAction = new Action("路人甲");
		
		//场景一:泰国大象,路人甲,新飞冰箱
		taiguoxiang = new Elephant("泰国大象"); //new表示大象已经牵过来,在内存中已分配空间,默认值null已有
											 //如果没有带参数的构造方法。Java 默认给无参的构造方法,Elephant()
											 //之前我们没有定义,也没有出错,但一旦定义了带参数构造函数,系统不再
											 //默认给无参数的构造函数,此处构造方法再无参就会出错
		xinfeibingxiang = new IceBox("新飞冰箱");//冰箱已放好
		lurenjia = new Person("路人甲");        //拉冰箱门的人已准备好
											  //以上都是现实中,或在内存中已经存在的活生生对的对象,但和剧本中的对象没有关联
											  //Client类之外的类就是剧本、蓝图、规划图、计划书、抽象的、服务器类
											  //Client类中目前所有的成员变量和Action中的虽然同名的成员变量不是一回事
											  //谁建立的Client类中的成员变量和Action中的成员变量之间的关系?set
											  //那个类拥有这些成员变量,他的对象就调用set方法。Action类拥有aElephant
											  //就用aAction调用set方法,设置aElephant。
		
		aAction.setaElephant(taiguoxiang);    //双击setaElephant(),再右击 open declaratio 
											  //程序自动转到Action类中本方法定义类
		aAction.setaIceBox(xinfeibingxiang);
		aAction.setaPerson(lurenjia);
		
		taiguoxiang.setaIceBox(xinfeibingxiang);
		taiguoxiang.setWidth(1.0);
		taiguoxiang.setHeight(1.8);
		xinfeibingxiang.setWidth(1.5);
		xinfeibingxiang.setHeight(2.0);
		
		aAction.action();
	}
}

一些简单技巧

在使用编辑器时候,有很多简单的技巧,我就这次我们可能用的到,说一下了:

  1. 快速创建main函数
    方法:先输入main,然后按Alt+/,选择第一个即可;

  2. 快速输入System.out.println();
    方法:在方法体内先输入sysout,然后再按Alt+/即可;

  3. 快速创建 set/get 函数
    方法:先在类体内设置好变量,然后点击菜单栏中 Source ,然后点击里面的Generate Getters and Setters…,弹出来的对话框,勾选上你想要用的变量即可。

大象进冰箱案例学习Java(二) 中是有关抽象类用实现大象进冰箱的例子。

你可能感兴趣的:(Java,面向对象)