抽象类使用关键字abstract定义,如果一个类里有任何抽象方法,此类必须定义为抽象类
抽象类包括抽象方法,抽象方法没有任何实际内容,这些方法的具体功能由继承它的子类实现
抽象类的子类必须把超类里的所有抽象方法全部具体化,否则此子类也要定义为抽象类
例
public abstract class Shape {
private String name;
//constructor
public Shape(String shapeName) {
name = shapeName;
}
public String getName() {
return name;
}
public abstract double area();
public abstract double perimeter();
public double semiPerimeter() {
return perimeter() / 2;
}
}
抽象类Shape
public class Circle extends Shape {
private double radius;
//constructor
public Circle (double circleRadius, String circleName) {
super(circleName);
radius = circleRadius;
}
public double perimeter() {
return Math.PI * radius * 2;
}
public double area() {
return Math.PI * radius * radius;
}
Shape的子类Circle
public class Square extends Shape{
private double side;
//constructor
public Square(double squareSide, String squareName) {
super(squareName);
side = squareSide;
}
public double perimeter() {
return 4 * side;
}
public double area() {
return side * side;
}
Shape子类Square
注意:
一个抽象类既可以有抽象方法也可以有实体方法。一个抽象类还可以不含任何抽象方法
一个抽象类可以有也可以没有构造方法
多态对抽象类依然适用
Shape circ = new Circle(10, "circle");
Shape sq = new Square(9.4, "Square");
Shape s = null;
Scanner input = new Scanner(System.in);
String str = input.nextLine();
if (str.equals("circle")) {
s = circ;
} else {
s = sq;
}
System.out.println(s.getName() + " " + s.area());