13.1
GeometricObject类
public abstract class GeometricObject{
private String color = "white";
private boolean filled; //是否要上色
private java.util.Date dateCreated;
public GeometricObject() {
dateCreated = new java.util.Date();
}
public GeometricObject(String color, boolean filled) {
dateCreated = new java.util.Date();
this.color = color;
this.filled = filled;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public boolean getFilled() {
return filled;
}
public void setFilled(boolean filled) {
this.filled = filled;
}
public boolean isFilled(){
return filled;
}
public java.util.Date getDateCreated() {
return dateCreated;
}
@Override
public String toString() {
return "created on " + dateCreated + "\ncolor: " + color + " and filled: " + filled;
}
//抽象方法
public abstract double getArea();
public abstract double getPerimeter();
}
Triangle类
public class Triangle extends GeometricObject implements Comparable<Triangle>{
private double side1 = 1.0;
private double side2 = 1.0;
private double side3 = 1.0;
public Triangle() {
}
public Triangle(double side1, double side2, double side3,
String color, boolean filled) {
this.side1=side1;
this.side2=side2;
this.side3=side3;
setColor(color);
setFilled(filled);
}
public double getSide1() {
return side1;
}
public double getSide2() {
return side2;
}
public double getSide3() {
return side3;
}
@Override
public double getArea() {
double p = (side1 + side2 + side3) / 2;
double temp = p * (p - side1) * (p - side2) * (p - side3);
return Math.sqrt(temp);
}
@Override
public double getPerimeter() {
return side1+side2+side3;
}
@Override
public int compareTo(Triangle o) {
if(getArea()>o.getArea())
return 1;
else if(getArea()<o.getArea())
return -1;
else
return 0;
}
@Override
public String toString(){
return "side1: " + side1 + " side2: " + side2 + " side3: " + side3 +" Area: " +getArea();
}
//调用父类的toString
public String superToString(){
return super.toString();
}
public static double maxPerimeter(GeometricObject ob1,GeometricObject ob2){
if (ob1.getPerimeter()>ob2.getPerimeter())
return ob1.getPerimeter();
else if(ob1.getPerimeter()<ob2.getPerimeter())
return ob2.getPerimeter();
else
return 0;
}
}
测试类
public class TriangleTest {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter there side:");
double side1 = input.nextDouble();
double side2 = input.nextDouble();
double side3 = input.nextDouble();
System.out.print("setColor:");
String color=input.next();
System.out.print("filled?(true/false):");
boolean filled=input.nextBoolean();
input.close();
Triangle object1 =new Triangle(side1,side2,side3,color,filled);
System.out.println("Area:"+object1.getArea());
System.out.println("Perimeter:"+object1.getPerimeter());
System.out.println(object1.superToString());
}
}
测试类2(非书本要求)
public class TriangleTest2 {
public static void main(String[] args) {
Triangle ob1 = new Triangle(3,4,5,"white",true);
Triangle ob2 = new Triangle(6,8,10,"white",true);
System.out.println("MAX_Perimeter: "+Triangle.maxPerimeter(ob1,ob2));
System.out.println("ob1_Area>ob2_Area ? 1:-1 \nreturn:" + ob1.compareTo(ob2));
System.out.println("________________________________________________________");
Triangle obs[] = {
new Triangle(3,4,5,"white",true),
new Triangle(6,8,10,"white",true),
new Triangle(5,11,12,"white",true),
};
java.util.Arrays.sort(obs);
for(Triangle ob:obs){
System.out.print(ob.toString() + " ");
System.out.println();
}
}
}
13.7
Conlor接口
public interface Colorable {
public abstract void howToColor();
}
Square类
public class Square extends GeometricObject implements Colorable{
private double side;
public Square(){
this.side =0;
}
public Square(double side,String color,boolean filled){
this.side = side;
setColor(color);//调用父类已有方法
setFilled(filled);//调用父类已有方法
}
public double getSide() {
return side;
}
public void setSide(double side) {
this.side = side;
}
@Override
public void howToColor() {
System.out.println("Color all four sides");
}
@Override
public double getArea() {
return Math.pow(side,2);
}
@Override
public double getPerimeter() {
return side*4;
}
}
测试类
public class SquareTest {
public static void main(String[] args) {
GeometricObject[] obs = {new Square(1,"white",true),new Square(2,"yellow",true)};
Square t = null;
for(GeometricObject ob:obs){
if(ob instanceof Square)
t = (Square)ob;
if(t.isFilled())
t.howToColor();
}
}
}
本文介绍了Java中的抽象几何对象类GeometricObject和具体实现的Triangle与Square类,展示了如何创建、颜色设置和比较面积与周长。Triangle类继承自GeometricObject并实现了Comparable接口,Square类则扩展了GeometricObject并实现了Colorable接口。测试类展示了实例创建与功能应用。
4664

被折叠的 条评论
为什么被折叠?



