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+")");

	}

笔记:

  1. 首先,这是一个非常简陋的案例,在很多方面都有很多的改进空间,比如:真实情况的时候,不可能全是int型的数据,在这个方面还能改进、其次,在多态的特性运用上也没有明显痕迹,就只有一个调用父类的方法及变量罢了。
  2. 一看就知道此时的我有多么的low,只能对自己说:“加油吧!只要能够一直把这件事情做下去,相信肯定会有结果。”