【问题分析——抽象过程】
1． 对“圆类”的抽象
（1）圆形是由半径确定其大小的，计算面积、周长都需要利用半径值，所以半径是构成“圆”类的一个成员。我们称为“属性成员”。
（2）对于 “圆”，需要计算其面积、周长，计算圆面积、周长的方法也是是构成“圆”类的成员。我们称为“方法成员”。
（3）创建圆的方法（称为构造方法），需要给圆的“属性成员——半径”提供值（通过形参提供值）。
2．对“球类”的抽象
（1）同样，对于球形，也是由半径确定其大小的，计算球的表面积、体积也都需要利用半径值，所以球半径是构成“球”类的一个成员——属性成员。
（2）对于“球”，需要计算其表面积、体积，这“球”类的方法成员。
（3）创建球的方法（构造方法），需要给球的“属性成员——半径”提供值（通过形参提供值）。
通过上面的分析，我们可以分别给出描述“圆”和“球”类的“成员信息”。
3．“圆类”的成员信息的定义
（1）“圆类”的名称为“Circle”。类名是标识符，命名时，要符合标识符的命名规范，并且，类名称的单词首字符要大写。
（2）“圆类”属性成员——半径用r表示，其类型为实型。
（3）“圆类”方法成员：计算面积用getArea()描述、计算周长用getPerimeter ()描述，其计算结果值都为实型值。
（4）“圆类”的构造方法：Circle(double banJing)。
（5）对于一个圆，有时需要重新设置其半径值的大小，或者需要获取圆的半径值，为此，还需要两个方法成员：setR()、getR()。
4．“球类”的成员信息的定义
（1）“球类”的名称为“Sphere”。类名是标识符，命名时，要符合标识符的命名规范，并且，类名称的单词首字符要大写。
（2）“球类”属性成员——半径用r表示，其类型为实型。
（3）方法成员：计算体积、表面积分别用getVolume和getSurfaceArea()表示。
（4）对于一个球，有时需要重新设置其半径值的大小，或者需要获取球的半径值，为此，还需要两个方法成员：setR()、getR()。
经上面分析后，我们可以创建“圆类”和“球类”。
“圆类”的名称为“Circle”。该类的代码如下，并保存在ch05_1/CircleJava中。

【圆类的Java编码】注意给出的注解和说明。
（1）package ch05_5;   //创建包名（ch05_5），并将该类文件存放到该位置内
（2）public class Circle {
（3）    //成员属性：半径
（4）    private double r;
（5）    //成员方法——计算面积
（6）    public double getArea(){ 
（7）        double s=Math.PI * r * r; //求出圆面积值
（8）        return s;              //将计算结果返回给方法名
（9）    }
（10）   //成员方法——计算周长
（11）   public double getPerimeter(){
（12）       double l= 2 * Math.PI * r; //求出周长值
（13）       return l;              //将计算结果返回给方法名
（14）   }
（15）   // 带参数的构造方法，注意，这里的形参变量名称与成员属性名相同，
（16）   //为了区别，在属性名前使用this关键字
（17）   public Circle(double r) {
（18）       this.r = r;
（19）   }
（20）    //get方法，获取属性r的值
（21）    public double getR() {
（22）       return r;
（23）   }
（24）   //set方法，重新设置成员属性r的值。,注意，该方法与构造方法的区别
（25）   public void setR(double r) {
（26）       this.r = r;
（27）   }
（28）}

类Circle的定义共有28行代码，其中，行（1）是包语句；行(2)为类定义开始标记，行(28)为类定义结束标记，在行(3)—(27)之间为类的定义体（类体）。
“球类”的名称为“Sphere”。该类的代码如下，并保存在ch05_5/ Sphere Java中。
【球类的Java编码】其结构与“圆类”的结构相似，就不给出注解和说明了。
package ch05_5; //创建包名（ch05_5），并将该类文件存放到该位置内
public class Sphere {
	//成员属性——半径
	private double r;
	//球的成员方法——计算表面积
	public double getArea(){
		double s= Math.PI * r * r * 4;    //球表面积
		return s;                     //将计算结果返回给方法名
	}
	//球的成员方法——计算体积
	public double getVolume(){
		double v=Math.PI * r * r * r * 4 / 3;    //球体积
		return v;                          //将计算结果返回给方法名
	}
    // 带参数的构造方法，注意，这里的形参变量名称与成员属性名相同，
    //为了区别，在属性名前使用this关键字
    public Sphere(double r) {
		this.r = r;
	}
    //get方法，获取属性r的值
	public double getR() {
		return r;
	}	
	//set方法，重新设置成员属性r的值  ,注意，该方法与构造方法的区别
	public void setR(double r) {
		this.r = r;
	}
} 
【主类的分析——抽象过程】
我们设计“类Circle”和“类Sphere”的目的，就是要在其它类中调用类成员方法完成所要求的任务。
在这里，设计一个只含有main()方法的类：Main.java，在main方法中，分别调用“圆类”和“球类”的成员方法进行求值。为此，需要在main方法中创建对象圆类对象和球类对象。
在本例中，就是创建4个不同的对象（2个圆对象、2个球对象），然后计算两个圆形的面积和、周长和，两个球形的表面积和、体积和，并输出计算结果。
main()方法，方法体的处理过程如下：
（1）声明“圆类”对象c1、c2。
（2）利用“圆类”的构造方法，创建c1和c2。
（3）声明“球类”对象s1、s2。
（4）利用“球类”的构造方法，创建s1和s2。
（5）由对象c1调用其方法，计算圆c1的面积和周长。
（6）由对象c2调用其方法，计算圆c2的面积和周长。
（7）由对象s1调用其方法，计算球s1的表面积和体积。
（8）由对象s2调用其方法，计算球s2的表面积和体积。
（9）分别求出其面积和、周长和、表面积和、体积和值。
（10）输出显示计算结果。
（11）计算求值结束。
【主类Main.java源代码】
package ch05_5; //包名（ch05_5），并将该类文件存放到该位置内
public class Test_5_5_Main {
    //该类物属性成员，只有一个完成业务需求的main方法。
	public static void main(String[] args) {
		Circle c1,c2;      //声明圆的两个对象
		Sphere  s1,s2;    //声明球的两个对象
		c1=new Circle(10);//创建半径长度为10的圆
		c2=new Circle(20);//创建半径长度为20的圆
		s1=new Sphere(5);//创建半径长度为5的球
		s2=new Sphere(25);//创建半径长度为25的球
		double zc1=c1.getPerimeter();//计算圆c1的周长。并保存在变量zc1中
		double zc2=c2.getPerimeter();//计算圆c2的周长。并保存在变量zc2中
		double mj1=c1.getArea();//计算圆c1的面积。并保存在变量mj1中
		double mj2=c2.getArea();//计算圆c2的面积。并保存在变量mj2中
		double zmj=mj1+mj2;//求两个圆的面积和，并保存在变量zmj中
		double zzc=zc1+zc2;//求两个圆的周长和，并保存在变量zzc中
       //不能直接使用r，只能利用方法获取半径值，下面几个获取半径的方式与此一样
		System.out.println("第一个圆：半径="+c1.getR());
		System.out.println("第一个圆：面积="+mj1+"  周长="+zc1);
		System.out.println("第二个圆：半径="+c2.getR());
		System.out.println("第二个圆：面积="+mj2+"  周长="+zc2);
		System.out.println("两圆：面积和="+zmj+"  周长和="+zzc);
		System.out.println("----------------------------------------");
		double tj1=s1.getVolume();//计算球s1的体积。并保存在变量tj1中
		double tj2=s2.getVolume();//计算球s2的体积。并保存在变量tj2中
		double bmj1=s1.getArea();//计算球s1的表面积。并保存在变量bmj1中
		double bmj2=s2.getArea();//计算球s2的表面积。并保存在变量bmj2中
		double bmj=bmj1+bmj2;//求两个球的表面积和，并保存在变量bmj中
		double tj=tj1+tj2;//求两个球的体积和，并保存在变量tj中
		System.out.println("第一个球：半径="+s1.getR());//
		System.out.println("第一个球：表面积="+bmj1+"  体积="+tj1);
		System.out.println("第二个球：半径="+s2.getR());
		System.out.println("第二个球：表面积="+bmj2+"  体积="+tj2);
		System.out.println("两球：表面积和="+bmj+"  体积和="+tj);
		System.out.println("----------------------------------------");
	}
}
