public abstract class Shape {
public abstract double area();
public abstract double perimeter();
/** return the ratio of area to perimeter */
public double areaToPerimeterRatio() {
return area()/perimeter();
}
}
|
abstract. If you declare a method abstract, you don't have to implement the method.
e.g. public abstract double area();abstract. Fail to do this will cause a compiling error. e.g public abstract class Shapepublic double areaToPerimeterRatio().Shape class.
You can declare a Shape but you can't create an instance of Shape. e.g
Shape shape is legal but Shape shape = new Shape() is not.
public abstract class Shape2 extends Shape {
/** return the ratio of area to the square of the perimeter */
public double areaToPerimeterSquareRatio() {
return area()/(perimeter()*perimeter());
}
}
|
public class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public double area() {
return width*height;
}
public double perimeter() {
return 2*(width+height);
}
}
|
public class Circle extends Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
public double area() {
return Math.PI*radius*radius;
}
public double perimeter() {
return 2*Math.PI*radius;
}
}
|
Rectangle and Circle classes extend Shapearea(), perimeter(), so they are not abstract classes.
public class ShapeTest {
public static void main(String[] args) {
Rectangle r = new Rectangle(3,5);
System.out.println("Area: " + r.area() + " Perimeter: " + r.perimeter() +
" Ratio: " + r.areaToPerimeterRatio());
Circle c = new Circle(10.5);
System.out.println("Area: " + c.area() + " Perimeter: " + c.perimeter() +
" Ratio: " + c.areaToPerimeterRatio());
}
}
|
Area: 15.0 Perimeter: 16.0 Ratio: 0.9375 Area: 346.36059005827474 Perimeter: 65.97344572538566 Ratio: 5.25 |
Circle and Rectangle can use areaToPerimeterRatio() method from the
super class Shape