特殊的数据类型:类 class

在基本数据类型中,我们可以使用特定的关键词来描述==单个==数据,比如一个整数,一个小数,或者一个字符串。那么如果我们想要描述一个更加复杂的个体该怎么办呢?比如我们想要在程序中描述一只猫或一只狗,或者一家商店?通常这种类型包含==多个需要描述的属性==。

Java编程中可以把类class当作一种特殊的数据类型来描述复杂的个体。

Pet Zone案例

考虑一个宠物管理系统,我们需要描述宠物的特性,比如小猫或者小狗。在这个简单案例里,我们只描述每只宠物的三个属性:名字、品种和年龄。

  • Step 1. 为案例创建一个新的包petzone
  • Step 2. 创建描述一个描述猫的类。

Cat.java

package petzone;

public class Cat {          //class当作一种特殊的数据类型,描述一个复杂的个体
	public String name;     // 第一个属性:名字
	public String breed;  // 第二个属性:品种
	public int age;         // 第三个属性:年龄
}

备注

  1. 上述Cat类中,属性namespecies均为字符串类型,age是整数类型;
  2. 我们给Cat的每个属性添加了public修饰符,使得其对项目中其他所有代码可见(可以使用)。
  • Step 3. 依照相同的方式,创建一个Dog类用来描述小狗。

Dog.java

package petzone;
public class Dog {
	public String name;
	public String breed;
	public int age;
}

我们可以看到,Dog类和Cat类非常相似,但现阶段我们只能这么做。后续当我们讨论完类的继承特性后,有更好的描述方式。

  • Step 4. 创建一个PetManager类,用来管理Pets。这里我们只创建一些小猫小狗的个体(objects),并显示一些信息给客户。

PetManager.java

import petzone.Cat;
import petzone.Dog;

public class PetManager {
    
	public static void main(String[] args){
		// 创建第一只猫
		Cat firstCat = new Cat();
		firstCat.name = "Elie";
		firstCat.breed = "British Shorthair";
		firstCat.age = 3;
		
		// 创建第二只猫
		Cat secondCat = new Cat();
		secondCat.name = "Gigi";
		secondCat.breed = "Jungle";
		secondCat.age = 5;
		showCatInfo(firstCat);	// 调用方法,打印firstCat的信息
		showCatInfo(secondCat); // 调用方法,打印secondCat的信息
		Dog firstDog = new Dog();
		firstDog.name = "June";
		firstDog.breed = "Husky";
		firstDog.age = 8;
		showDogInfo(firstDog);

	}
	/*
	 * 定义一个方法显示Cat信息,需要传入一个cat,告知方法显示哪只猫的信息
	 * 方法执行完后不需要返还任何数据,因此返回类型是void
	 * static修饰符使得该方法可以被main方法(也是一个static方法)调用
	 */
	static void showCatInfo(Cat cat) {
		System.out.print("Cat: " + cat.name + '\t');
		System.out.print("species: " + cat.breed + '\t');
		System.out.println("age: " + cat.age);
	}
	/*
	 * 同理创建一个类似的方法,显示小狗的信息
	 */
	static void showDogInfo(Dog dog) {
		System.out.print("Dog: " + dog.name + '\t');
		System.out.print("species: " + dog.breed + '\t');
		System.out.println("age: " + dog.age);
	}
}