一个抽象类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();
		}
	}
}

  • 13
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljt-tiger

thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值