java 面向对象 ——实现圆柱体类

时间:2025-03-13 18:31:29

java 面向对象 基础练习

三种方式实现圆柱体类的设计并生成具体的圆柱体对象进行测试

1,简单类(半径,高)
2,类作为一个数据类型使用(底,高)
3,继承(半径,高。父类是圆,子类是圆柱体)

1,简单类(半径,高)

package ZuoYe2_1;

public class YuanZuTi {
	private double r;//半径
	private double height;//高
	final double PI=3.1415826;//常量π
	
	//构造方法
	public YuanZuTi() {
		
	}
	public YuanZuTi(double r) {
		this.r = r;		
	}
	/**
	* 作用:  在方法内部使用,即这个方法所属对象的引用
	*       在构造器内部使用,表示该构造器正在初始化的对象
	* this可以调用类的属性、方法和构造器
	* 当在方法内需要用到调用该方法的对象时,就用this  
	*/

	public double getR() {
		return r;
	}
	public void setR(double r) {
		this.r = r;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	/**
	 * 求周长
	 * @return
	 */
	public double getZhouchang() {
		return PI*r*2;
	}
	/**
	 * 求体积
	 * @return
	 */
	public double getTiji() {
		return PI*r*r*height;
	}
	/**
	 * 求底面积
	 * @return
	 */
	public double getdmj() {
		return PI*r*r;
	}
	/**
	 * 求侧面积
	 * @return
	 */
	public double getcmj() {
		return this.getZhouchang()*this.height;
	}
	/**
	 * 求表面积
	 * @return
	 */
	public double getbmj() {
		return this.getcmj()+this.getdmj()*2;
	}
}

public class YuanZuTi_demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//生成长方形对象
		/**
         *对象的使用 
         *创建对象: 类名 对象名 =new 类名();
         * 使用对象: 对象名.对象成员
         */
		/*YuanZuTi yuanzuti=new YuanZuTi();
		(6);
		(5);*/
		
		YuanZuTi yuanzuti=new YuanZuTi(6);
		yuanzuti.setHeight(5);//调用
		
		System.out.println("半径:"+yuanzuti.getR());
		System.out.println("高:"+yuanzuti.getHeight());
		System.out.println("体积:"+yuanzuti.getTiji());
		System.out.println("表面积:"+yuanzuti.getbmj());
		System.out.println("侧面积:"+yuanzuti.getcmj());
		System.out.println("底面积:"+yuanzuti.getdmj());
	}

}

2,类作为一个数据类型使用(底,高)

package ZuoYe2_2;
 /**
 * 类:对一类事物的描述,是抽象的、概念上定义的
 * 对象:是实际存在的该类事物的每个个体,也被称为实例
 * public 修饰符:类可以被任意访问
 * 属性:   修饰符 数据类型 属性名=初始化值;
 * 成员变量:在方法体外,类体内声明的变量成为成员变量
 * 局部变量:在方法体内部声明的变量
 */
public class Yuan {
	private double r;
	final double PI=3.1415926;
	 /**
     * final标记的类不能被继承
     * final标记的方法不能被子类重写
     * final标记的变量(成员变量或者局部变量)即称为常量。名称大写。
     */

	/**
	 * 构造方法(构造器):构造方法,要重载 
	 * 特征: 1.具有和类相同的名称 
	 *      2.不声明返回值类型
	 *      3.不能被修饰符修饰,不能有return语句
	 * 作用:创建对象;给对象进行初始化
	 * 格式: 修饰符  类名(参数列表){
	 *      初始化语句;
	 *      }
	 * 注意:1.每个类至少有一个构造器 
	 *     2.一个类可以创建多个重载的构造器,参数列表必须不同
	 *     3.父类的构造器不可被子类继承
	 *     4.子类中所有的构造器默认都会访问父类中的空参数的构造器
	 * 重载:同一个类,允许存在一个以上的同名方法,只要他们的参数的个数或者参数类型不同即可。
	 * 特点:与返回值无关,调用时,根据方法参数列表的不同来区别
	 */
	public Yuan() {   //无参构造器
		super();
	}
	public Yuan(double r) {
		super();
		this.r = r;
	}
	
	public double getR() {
		return r;
	}
	public void setR(double r) {
		this.r = r;
	}
	
	public double getZhouchang() {
		return PI*r*2;
	}
	public double getArea() {
		return PI*r*r;
	}
}


public class YuanZuTi {
	private Yuan bottom;
	private double height;
	
	public YuanZuTi() {
		super();
	}
	public YuanZuTi(Yuan bottom) {
		super();
		this.bottom = bottom;
	}
	public YuanZuTi(double height) {
		super();
		this.height = height;
	}
	public YuanZuTi(Yuan bottom, double height) {
		super();
		this.bottom = bottom;
		this.height = height;
	}
	
	public Yuan getBottom() {
		return bottom;
	}
	public void setBottom(Yuan bottom) {
		this.bottom = bottom;
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	
	
	public double getdmj() {
		return this.bottom.getArea();
	}
	public double getcmj() {
		return this.bottom.getZhouchang()*this.height;
	}
	public double getbmj() {
		return this.getcmj()+this.getdmj()*2;
	}
	public double getTiji() {
		return this.getdmj()*height;
	}

	
}

public class YuanZuTi_demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		/*YuanZuTi yuanzuti=new YuanZuTi();
		Yuan bottom=new Yuan(7);
		(bottom);
		(5);*/
		
		/*Yuan bottom=new Yuan(7);
		YuanZuTi yuanzuti=new YuanZuTi(bottom);  //传入底
		(5);*/
		
		/*YuanZuTi yuanzuti=new YuanZuTi(5); //传入高
		Yuan bottom=new Yuan(7);
		(bottom);*/
		
		Yuan bottom=new Yuan(7);
		YuanZuTi yuanzuti=new YuanZuTi(bottom,5);

		System.out.println("半径:"+yuanzuti.getBottom().getR());
		System.out.println("高:"+yuanzuti.getHeight());
		System.out.println("体积:"+yuanzuti.getTiji());
		System.out.println("表面积:"+yuanzuti.getbmj());
		System.out.println("侧面积:"+yuanzuti.getcmj());
		System.out.println("底面积:"+yuanzuti.getdmj());
	}

}

3,继承(半径,高。父类是圆,子类是圆柱体)

package ZuoYe2_3;
/**
 * 继承
 */
public class Yuan {
	private double r;
	private static final double PI=3.1415926;所有的圆都有同一个PI
	
	//构造方法
	public Yuan() {
		super();
	}
	public Yuan(double r) {
		super();
		this.r = r;
	}
	
	public double getR() {
		return r;
	}
	public void setR(double r) {
		this.r = r;
	}
	
	public double getZhouchang() {
		return 2*PI*r;
	}
	public double getArea() {
		return PI*r*r;
	}
	/**
	 * 方法的重写:子类与父类有相同的方法(方法名、参数、返回值都相同),在程序执行的时,子类的方法将覆盖父类的方法。
	 * 修饰符可以不同,但是不能比父类的窄
	 */
	@Override //重写(覆盖)  规则:返回值 ,参数必须一样 ,修饰符可不一样  修饰符(从大到小)   public protected default private
	public String toString() {
		return "半径" + r ;
	}
}



public class YuanZuTi extends Yuan{
	private double height;

	//构造方法
	public YuanZuTi() {
		super();
	}

	public YuanZuTi(double height) {
		super();
		this.height = height;
	}
	public YuanZuTi(double r,double height) {
		//继承父类的设置
    	//(r);   //方法1 
    	//(r);  //方法2
    	//setR(r);        //方法3
		super(r);//调用父类的构造方法
		this.height=height;
		/**
		 * this访问当前类的对象
		 * super访问父类的对象
		 */
	}
	public double getHeight() {
		return height;
	}
	public void setHeight(double height) {
		this.height = height;
	}
	
	public double getdmj() {
		return this.getArea();
	}
	public double getcmj() {
		return this.getZhouchang()*height;
	}
	public double getbmj() {
		return this.getdmj()*2+this.getcmj();
	}
	public double getTiji() {
		return this.getArea()*this.height;
	}

	@Override
	public String toString() {
		String result;
		result =super.toString()+"\n";
		result += "高"+height;
		return result;
	}
	
}


public class YuanZuTi_demo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*YuanZuTi yuanzuti = new YuanZuTi();
		(6);
		(5);
		
		("半径:"+());
		("高:"+());*/
		
		YuanZuTi yuanzuti = new YuanZuTi(6,5);
		System.out.println(yuanzuti);
		
		System.out.println("体积:"+yuanzuti.getTiji());
		System.out.println("表面积:"+yuanzuti.getbmj());
		System.out.println("侧面积:"+yuanzuti.getcmj());
		System.out.println("底面积:"+yuanzuti.getdmj());
		
	}

}