配合Main.java撰寫Rectangle(長方形), Circle(圓形), Triangle(三角形), Cylinder(圓柱體), Sphere(球體)等5個class.
其中Rectangle(長方形), Circle(圓形), Triangle(三角形)等3個class中須有getArea method能夠回傳面積, printArea method能夠在螢幕上顯示面積.
Cylinder(圓柱體), Sphere(球體)等2個class中除了須有getArea method能夠回傳面積, printArea method能夠在螢幕上顯示面積外, 尚須有getVolume method能夠回傳體積, printVolume method能夠在螢幕上顯示體積.
各形狀面積、體積公式如下 :
Rectangle(長方形)面積公式 : 長(length) * 寬(width)
Circle(圓形)面積公式 : 圓周率*半徑(radius)平方
Triangle(三角形)面積公式 : 假設a,b,c為三角形三邊長,d=總邊長/2, 面積=開根號(d(d-a)(d-b)(d-c))
Cylinder(圓柱體)面積公式 : 2*圓周率*半徑(radius)平方+2*圓周率*半徑*高(height)
Cylinder(圓柱體)體積公式 : 高(height)*圓周率*半徑(radius)平方
Sphere(球體)面積公式 : 4*圓周率*半徑(radius)平方
Sphere(球體)體積公式 : 3分之4*圓周率*半徑(radius)3次方
圓週率可讀取 Math class中的PI變數
開根號可呼叫Math class中的sqrt() method
次方計算可呼叫Math class中的pow() method
Main:
package shapetest;
public class Main {
public static void main(String[] args) {
Rectangle a = new Rectangle("長方形1", 10, 5);
Circle b = new Circle("圓形1", 9);
Triangle c = new Triangle("三角形1", 5, 5, 8);
// Cylinder d = new Cylinder("圓柱體1", 7, 13);
//// Sphere e = new Sphere("球體", 7);
a.printArea();
b.printArea();
c.printArea();
// d.printArea();
// d.printVolume();
// e.printArea();
// e.printVolume();
}
}
Rectangle:
package shapetest;
public class Rectangle {
private String name;
private double length, width;
public Rectangle(String name, double length, double width) {
this.setName(name);
this.setLength(length);
this.setWidth(width);
}
public double getArea() {
return length * width;
}
public void printArea() {
System.out.println(name + "的面積=" + getArea());
}
public void setName(String name) {
if (name != null) {
this.name = name;
}
}
public String getName() {
return name;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
}
Circle:
package shapetest;
class Circle {
private String name;
private double radius;
public Circle(String name, double radius) {
this.setName(name);
this.setRadius(radius);
}
public double getArea() {
return Math.pow(radius, 2) * Math.PI;
}
public void printArea() {
System.out.println(name + "的面積=" + getArea());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}
Triangle:
package shapetest;
class Triangle {
private String name;
private double a, b, c;
public double d = a + b + c;
public Triangle(String name, double a, double b, double c) {
this.setName(name);
this.setA(a);
this.setB(b);
this.setC(c);
}
public double getArea() {
double d = a + b + c;
return Math.sqrt((d * (d - a) * (d - b) * (d - c)));
}
public void printArea() {
System.out.print(name + "的面積=" + getArea());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public double getC() {
return c;
}
public void setC(double c) {
this.c = c;
}
}
***Cylinder:
package com.hellopianoman.shape;
public class Cylinder {
private String name;
private double radius, height;
public Cylinder(String name, double radius, double height) {
this.setName(name);
this.setRadius(radius);
this.setHeight(height);
}
public double getArea() {
return 2*Math.PI*Math.pow(radius, 2)+2*Math.PI*radius*height;
}
public void printArea() {
System.out.println(name+"的面積為"+getArea());
}
public double getVolume() {
return height*Math.PI*Math.pow(radius, 2);
}
public void printVolume() {
System.out.println(name+"的體積為"+getVolume());
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}
***Sphere:
package com.hellopianoman.shape;
public class Sphere {
private String name;
private double radius;
public Sphere(String name, double radius) {
this.setName(name);
this.setRadius(radius);
}
public double getArea() {
return 4*Math.PI*Math.pow(radius, 2);
}
public void printArea() {
System.out.println(name+"的面積為"+getArea());
}
public double getVolume() {
return (4.0/3)*Math.PI*Math.pow(radius, 3);
}
public void printVolume() {
System.out.println(name+"的體積為"+getVolume());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
}
REPEAT: 以上5個class有很多重複的程式碼,所以再開一個新的,將重複的都加進去這個新的class
package shapetest;
abstract public class Repeat { //加入抽象修飾字abstract
private String name;
public Repeat() {
this.setName(name); //本來this.setName(name)會有紅線 用class包起來就OK
}
abstract public double getArea(); //加入抽象修飾字abstract
public void printArea() {
System.out.println(name + "的面積=" + getArea()); //有紅線 因為class內找不到getArea method 但getArea無法共用 所以必須上面加入"抽象"mehod
}
public void setName(String name) {
if (name != null) {
this.name = name;
}
}
public String getName() {
return name;
}
}
Rectangle V2:
package com.hellopianoman.shape;
public class Rectangle extends Shape { // 子類別(sub class)繼承不到父類別(super class)的private屬性、private method, 也繼承不到父類別建構式(constructor)
private double length, width;
public Rectangle(String name, double length, double width) {
super(name); // 執行父類別建構式
this.setLength(length);
this.setWidth(width);
}
public double getArea() { // 此為覆寫了父類別的抽象方法, 或可說是實作了父類別的抽象方法
return this.length*this.width;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
}