class TestExtend {
public static void main(String[] args) {
Circle c = new Circle(3.4);
c.setDigit(8);
System.out.println(c + "面积:" +c.getArea() + ", 周长:" + c.getGirth());
Sphere s = new Sphere(3.4);
s.setDigit(8);
System.out.println(s + "面积:" +s.getArea() + ", 体积:" + s.getVolume());
Rectangle r = new Rectangle(34.1234, 65.12345);
r.setDigit(8);
System.out.println(r + "面积:" + r.getArea() + ",周长:" + r.getGirth());
Cube cube = new Cube(12.323,678,123);
cube.setDigit(8);
System.out.println(cube + "面积:" +cube.getArea() + ", 体积:" + cube.getVolume());
}
}
interface Graphy {
double PI = 3.1415926;
abstract public double getArea();
abstract public double getGirth();
// 格式化double类型,保留位数digit
default public double formatDouble(double d, int digit) {
if (digit < 0) {
throw new IllegalArgumentException();
}
if (digit == 0) {
return Math.round(d);
}
double multiple = Math.pow(10, digit);
d = Math.round(d * multiple);
d = d / multiple;
return d;
}
}
interface Body extends Graphy {
abstract public double getVolume();
// 实体没有周长,默认重写父类接口周长方法
default public double getGirth() {
return -1;
}
}
class Circle implements Graphy {
private double radius;// 半径
private int digit;// 保留小数位
// 构造方法,初始化半径
public Circle(double radius) {
this.radius = radius;
}
// 设置保留小数位
public void setDigit(int digit) {
this.digit = digit;
}
// 获取保留小数位
public int getDigit() {
return digit;
}
// 获取半径
public double getRadius() {
return radius;
}
// 获取面积
public double getArea() {
if (radius >= 0) {
return formatDouble(2 * Graphy.PI * radius, digit);
} else
return -1;
}
// 获取周长
public double getGirth() {
if (radius >= 0) {
return formatDouble(radius * Math.pow(Graphy.PI, digit) / 2, 2);
} else
return -1;
}
// 自我描述
public String toString() {
return this.getClass().getName() + ":radius:" + radius;
}
}
/**
* 球体是从圆继承半径和面积(面积要重写),
*/
class Sphere extends Circle implements Body{
// 带参构造
public Sphere(double radius) {
super(radius);
}
// 获得体积
public double getVolume() {
return formatDouble(4 * PI * Math.pow(super.getRadius(), 3) / 3, super.getDigit());
}
// 获得面积
public double getArea() {
return formatDouble(4 * PI * Math.pow(super.getRadius(), 2), super.getDigit());
}
}
class Rectangle implements Graphy{
private double length;
private double width;
private int digit;
public Rectangle(double length, double width) {
this.length = length;
this.width = width;
}
// 设置保留小数位
public void setDigit(int digit) {
this.digit = digit;
}
// 获取保留小数位
public int getDigit() {
return digit;
}
public double getLength() {
return length;
}
public double getWidth() {
return width;
}
public double getArea() {
return formatDouble(length * width, digit);
}
public double getGirth() {
return formatDouble(2 * (length + width), digit);
}
public String toString() {
return this.getClass().getName() + ":length:" + length + ",width:" + width;
}
}
class Cube extends Rectangle implements Body{
double height;
public Cube(double length, double width, double height) {
super(length, width);
this.height = height;
}
public double getArea() {
return formatDouble(super.getArea() *2 + 2 * (super.getLength() + super.getWidth()) * height, super.getDigit());
}
public double getVolume() {
return formatDouble(super.getArea() * height, super.getDigit());
}
public String toString() {
return super.toString() + ",height:" + height;
}
}
接口与继承
最新推荐文章于 2022-05-01 11:41:55 发布