Java 上转型与运行时多态 复习题

题目:

有一个抽象类ObjectVolume,如下所示:

abstract class ObjectVolume {
    abstract double getVolume();        //返回物体的体积
}

(1)编写球体类,立方体类和圆柱体类,它们是抽象类ObjectVolume的子类。

(2)编写一个public类,其中包含main方法和static double get(ObjectVolume obj)方法。

(3)在main方法中,从键盘上输入1(表示球体)、2(表示立方体)、3(表示圆柱体)时,调用get方法可以分别得到球体、立方体、圆柱体的体积。

//上转型与运行时多态
import java.util.Scanner;

//抽象类 abstract
abstract class ObjectVolume {
	abstract double getVolume();	//返回物体的体积
}

//非抽象子类必须具体实现抽象父类的所有抽象方法
//球体
class Qiuti extends ObjectVolume {
	double Rad;
	Qiuti(double r) {
		this.Rad = r;
	}
	double getRad() {
		return this.Rad;
	}
	void setRad(double r) {
		this.Rad = r;
	}
	//子类重写父类的方法
	double getVolume() {
		return 4*Math.PI * Rad*Rad*Rad/3;
	}
}

//立方体
class Lifangti extends ObjectVolume {
	double SideLen;
	Lifangti(double len) {
		this.SideLen = len;
	}
	double getSideLen() {
		return this.SideLen;
	}
	void setSideLen(double len) {
		this.SideLen = len;
	}
	//子类重写父类的方法
	double getVolume() {
		return SideLen*SideLen*SideLen;
	}
}

//圆柱体
class Yuanzhuti extends ObjectVolume {
	double Rad, Hei;
	Yuanzhuti(double r, double h) {
		this.Rad = r;
		this.Hei = h;
	}
	double getR() {
		return this.Rad;
	}
	void setR(double r) {
		this.Rad = r;
	}
	double getH() {
		return this.Hei;
	}
	void setH(double h) {
		this.Hei = h;
	}
	//子类重写父类的方法
	double getVolume() {
		return Math.PI*Rad*Rad*Hei;
	}
}

public class Shangzhuanxing {
	static double get(ObjectVolume obj) {        //参数是父类对象obj
		double v = obj.getVolume();
		return v;
	}

	public static void main(String[] args) {
		System.out.println("输入一个整数(1, 2, 3):");
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		double v;
		switch(num) {
		case 1:
			Qiuti q = new Qiuti(1.0);
            //实参为子类对象,形参为父类对象,传参时形参obj变成了上转型对象
			//上转型对象调用重写的子类方法
			v = get(q);        //调用静态方法get()
			System.out.println("球体体积是"+v);
			break;
		case 2:
			Lifangti lft = new Lifangti(2.0);
			v = get(lft);
			System.out.println("立方体体积是"+v);
			break;
		case 3:
			Yuanzhuti yzt = new Yuanzhuti(3.0, 4.0);
			v = get(yzt);
			System.out.println("圆柱体体积是"+v);
			break;
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_46845818/article/details/121887244