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());
}
}