欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一个抽象类Shape 里边有两个抽象方法 计算面积 和 周长; Shape由三角形和圆形继承,利用多态的特性设计完成不同子类的功能

程序员文章站 2024-03-18 15:25:46
...
一个抽象类Shape 里边有两个抽象方法 计算面积 和 周长; Shape由三角形和圆形继承,利用多态的特性设计完成不同子类的功能
原意要求如图:实现代码如下:

package com.tiger.practice;
import java.util.Scanner;

/**
 * Shape -- 抽象类
 * @author tiger
 *
 */
abstract class Shape{
	//计算周长
	public abstract double calcuPerimeter();
	//计算面积
	public abstract double calcuArea();

	public abstract void getType();
}

/**
 * 三角形类,三角形的任意两边的和大于第三边
 * @author tiger
 *
 */
class Triangle extends Shape{
	/**
	 * 三角形三边
	 */
	double a;
	double b;
	double c;
	/**
	 * 构造器,初始化三角形三边
	 * @param a
	 * @param b
	 * @param c
	 */
	public Triangle(double a, double b, double c) {
		this.a = a;
		this.b = b;
		this.c = c;
	}
	/**
	 * 计算三角形周长
	 */
	@Override
	public double calcuPerimeter() {
		double perimeter = a + b + c;
		return perimeter;
	}
	/**
	 * 计算三角形面积
	 */
	@Override
	public double calcuArea() {
		double s = (a + b + c) / 2;
		double area = Math.pow(s*((s - a)*(s - b)*(s - c)), 0.5);
		return area;
	}
	@Override
	public void getType() {
		System.out.println("我是一个圆!");
	}
}

/**
 * 圆类
 * @author tiger
 *
 */
class Circle extends Shape{
	//圆半径
	double r;
	/**
	 * 构造器,初始化圆的半径。
	 * @param r
	 */
	public Circle(double r) {
		this.r = r;
	}
	/**
	 * 计算圆周长
	 */
	@Override
	public double calcuPerimeter() {
		double perimeter = 2 * Math.PI * r;
		return perimeter;
	}
	/**
	 * 计算圆面积
	 */
	@Override
	public double calcuArea() {
		double are = Math.PI * r * r;
		return are;
	}
	@Override
	public void getType() {
		System.out.println("我是一个三角形!");
	}
}

public class Graphice {
	public static void main( String[] args ){
		test();
	}
	/**
	 * 测试
	 */
	public static void test(){
		prtMenu();
		Scanner sc = new Scanner( System.in );
		int shapeType = sc.nextInt();
		switch (shapeType) {
		case 1: createTriangle();break;
		case 2:createCircle();break;
		default: prt();break;

		}
	}
	/**
	 * 菜单提示消息
	 */
	public static void prtMenu(){
		System.out.println();
		System.out.println( "--------请选择你要创建的图形--------" );
		System.out.println( "[1] 三角形" );
		System.out.println( "[2] 圆形" );
		System.out.println();
	}
	/**
	 * 错误提示消息
	 */
	public static void prt(){
		System.err.println("输入代号有误,请输入 1 或者 2 ,谢谢!");
		Graphice.main(null);
	}
	/**
	 * 创建圆
	 */
	public	static void createCircle(){
		System.out.println("--------------圆----------------");
		Scanner sc1 = new Scanner( System.in );
		System.out.println("请输入圆的半径 r ");
		double r = sc1.nextDouble();
		Shape circle = new Circle(r);
		circle.getType();
		System.out.println("圆的面积 = " + circle.calcuArea());
		System.out.println("圆的周长 = " + circle.calcuPerimeter());
	}
	/**
	 * 创建三角形
	 */
	public static void createTriangle(){
		Shape triangle;
		System.out.println("------------三角形---------------");
		Scanner sc2 = new Scanner( System.in );
		System.out.println("请输入三角形三边!");
		double a = sc2.nextDouble();
		double b = sc2.nextDouble();
		double c = sc2.nextDouble();
		//校验三角形三边合法性
		if (a > 0 && b > 0 && c > 0 && 
				(a + b) > c && (a + c) > b && (b + c) > a) {
			triangle = new Triangle(a,b,c);
			triangle.getType();
			System.out.println("三角形的面积 = " + triangle.calcuArea());
			System.out.println("三角形的面积 = " + triangle.calcuPerimeter());
		}else {
			System.out.println("\n三角形三边不合法! 三角形创建失败! "
					+ "\n请重新输入三边\n");
			createTriangle();
		}
	}
}

相关标签: 趣味编程