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