Java类的继承与多态
**实验目的:
1.熟悉Java类的继承机制;
2.掌握Java类中成员变量和方法的访问控制;
3.熟悉方法或构造方法多态性;**
实验任务:
1.设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,获取和设置x 和y值的public方法。
2.设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的protected类型的成员变量r、获取和设置r值的
public方法、计算圆面积的public方法。
3.设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的
public方法、计算圆柱体体积的public方法。
4.建立若干个Cylinder对象,输出其轴心位置坐标、半径、高及其体积的值。
实验要求:
1. 每个类包含无参数和有参数的构造方法。构造方法用于对成员变量初始化,无参数的构造方法将成员变量初始化为0值。
2. 子类的构造方法调用父类的构造方法,对父类中的成员变量初始化。
3. 方法名自定;
Point类:
/**
@author DengMingxu
20212021年3月31日
State:unsolved
Hint:设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,
获取和设置x 和y值的public方法。
Idea:
*/
public class Point {
protected int x,y;
/**
* Idea:无参构造方法&有参构造方法
*
*/
public Point(){};
public Point(int x,int y){
this.x=x;
this.y=y;
}
/**
* @return the x
*/
public int getX() {
return x;
}
/**
* @param x the x to set
*/
public void setX(int x) {
this.x = x;
}
/**
* @return the y
*/
public int getY() {
return y;
}
/**
* @param y the y to set
*/
public void setY(int y) {
this.y = y;
};
}
Circle类:
/**
@author DengMingxu
20212021年3月31日
State:unsolved
Hint:设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的protected类型的成员变量r、
获取和设置r值的public方法、计算圆面积的public方法。
Idea:
*/
public class Circle extends Point{
protected int r;
public Circle(){};
public Circle(int r){
this.r=r;
};
/**
* Idea:带参构造方法
*
*/
public Circle(int x, int y, int r2) {
super.x=x;
super.y=y;
this.r=r2;
}
public int getS(){
return (int)Math.PI*r*r;
}
public int getS(int r){
return (int)Math.PI*r*r;
}
/**
* @return the r
*/
public int getR() {
return r;
}
/**
* @param r the r to set
*/
public void setR(int r) {
this.r = r;
}
}
Cylinder类:
/**
@author DengMingxu
20212021年3月31日
State:unsolved
Hint:设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包含有表示圆柱体高的protected类型的成员变量h、获取和设置h值的
public方法、计算圆柱体体积的public方法。
Idea:
*/
public class Cylinder extends Circle{
protected int h;
public Cylinder(){};
public Cylinder(int h){
this.h=h;
}
/**
* Idea:
*
*/
public Cylinder(int r, int h2) {
super.r=r;
this.h=h2;
}
/**
* Idea:
*
*/
public Cylinder(int a, int b, int r, int h2) {
this.h=h2;
super.r=r;
super.x=a;
super.y=b;
}
public int getV(){
return super.getS(super.r)*h;
}
/**
* @return the h
*/
public int getH() {
return h;
}
/**
* @param h the h to set
*/
public void setH(int h) {
this.h = h;
};
}
Main方法:
public class main {
public static void main(String[] args) {
Point p1=new Point();
int a=1,b=1;
Point p2=new Point(a,b);
int r=5;
Circle c1=new Circle(a,b,r);
int h=10;
Cylinder cyl1=new Cylinder(r,h);
Cylinder cyl2=new Cylinder(a,b,r,h);
System.out.println("p1("+p1.getX() +","+p1.getY()+") p2("+p2.getX()+","+p2.getY()+")");
System.out.println("c1的面积约为:"+c1.getS()+"(半径及point坐标分别为:"+r+"、("+a+","+b+"))");
System.out.println("cyl1的体积约为:"+cyl1.getV()+"(圆柱体的高和底面圆半径分别为:"+r+"、"+h+")");
System.out.println("cyl2的体积约为:"+cyl2.getV()+"(圆柱体的高、底面圆半径和底面point坐标分别为:"+r+"、"+h+"、("+a+","+b+")");
}
笔记:
- 首先,这是一个非常简陋的案例,在很多方面都有很多的改进空间,比如:真实情况的时候,不可能全是int型的数据,在这个方面还能改进、其次,在多态的特性运用上也没有明显痕迹,就只有一个调用父类的方法及变量罢了。
- 一看就知道此时的我有多么的low,只能对自己说:“加油吧!只要能够一直把这件事情做下去,相信肯定会有结果。”