package com.topic;
public abstract class Patterning implements Comparable<Patterning>{
String pencil;
boolean fill;
public abstract double area();
public abstract double perimeter();
public void fi() {
System.out.print("\t"+this.pencil);
if(fill==false) {
System.out.print("\t"+"无填充");
}else {
System.out.print("\t"+"有填充");
}
}
@Override
public int compareTo(Patterning p) {
if(area()>p.area()) {
return 1;
}else if(area()<p.area()) {
return -1;
}else {
return 0;
}
}
public String getPencil() {
return pencil;
}
public void setPencil(String pencil) {
this.pencil = pencil;
}
public boolean isFill() {
return fill;
}
public void setFill(boolean fill) {
this.fill = fill;
}
}
package com.topic;
public class Quadrate extends Patterning {
double l;
public Quadrate() {
}
public Quadrate(double l) {
this.l = l;
}
@Override
public String toString() {
return "Quadrate [l=" + l + ", pencil=" + pencil + ", fill=" + fill + "]";
}
@Override
public double area() {
return l * l;
}
@Override
public double perimeter() {
return l * 4;
}
}
package com.topic;
public class Ractangle extends Patterning {
double l, w;
public Ractangle() {
}
public Ractangle(double l, double w) {
this.l = l;
this.w = w;
}
@Override
public String toString() {
return "Ractangle [l=" + l + ", w=" + w + ", pencil=" + pencil + ", fill=" + fill + "]";
}
@Override
public double area() {
return l * w;
}
@Override
public double perimeter() {
return 2 * l + 2 * w;
}
}
package com.topic;
public class Roundness extends Patterning {
double rad;
public Roundness() {
}
public Roundness(double rad) {
this.rad = rad;
}
@Override
public String toString() {
return "Roundness [rad=" + rad + ", pencil=" + pencil + ", fill=" + fill + "]";
}
@Override
public double area() {
return (double) Math.round(rad * rad * Math.PI * 100) / 100;
}
@Override
public double perimeter() {
return (double) Math.round(2 * rad * Math.PI * 100) / 100;
}
}
package com.topic;
public class Test {
public static void main(String[] args) {
Patterning[] p=new Patterning[3];
p[0]=new Roundness(3);
p[1]=new Ractangle(10,5);
p[2]=new Quadrate(4);
System.out.print("圆形:");
p[0].setFill(true);
p[0].setPencil("绿色");
p[0].fi();
System.out.print("\t"+"周长:"+p[0].perimeter());
System.out.println("\t"+"面积:"+p[0].area());
System.out.print("长方形:");
p[1].setFill(false);
p[1].setPencil("红色");
p[1].fi();
System.out.print("\t"+"周长:"+p[1].perimeter());
System.out.println("\t"+"面积:"+p[1].area());
System.out.print("正方形:");
p[2].setFill(true);
p[2].setPencil("黄色");
p[2].fi();
p[1]=new Ractangle(10,5);
p[2]=new Quadrate(4);
System.out.print("\t"+"周长:"+p[2].perimeter());
System.out.println("\t"+"面积:"+p[2].area());
if(p[0].compareTo(p[1])==1) {
if(p[0].compareTo(p[2])==1) {
System.out.println("圆形的面积最大!");
}
else {
System.out.println("正方形的面积最大!");
}
}else if(p[0].compareTo(p[1])==0){
System.out.println("圆形和长方形的面积一样大!");
}else if(p[0].compareTo(p[1])==0 && p[1].compareTo(p[2])==0){
System.out.println("三个图形的面积一样大");
}else {
if(p[1].compareTo(p[2])==1) {
System.out.println("长方形的面积最大!");
}else if(p[1].compareTo(p[2])==0){
System.out.println("长方形和正方形的面积相等!");
}else {
System.out.println("正方形的面积最大!");
}
}
}
}
- 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。
- 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。
- 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。
- 一个类只能继承一个抽象类,而一个类却可以实现多个接口。
/但是jdk1.8之后接口里的方法也可以有静态方法和方法体了/