package fang_abstract;
public abstract class Shape {
{
System.out.println("执行Shape的初始化块……");
}
private String color;
public abstract double calPerimeter();
public abstract String getType();
public Shape() {}
public Shape(String color) {
System.out.println("执行Shape的构造器……");
this.color=color;
}
public void setColor(String color)
{
this.color = color;
}
public String getColor()
{
return this.color;
}
}
Shape抽象类包含了初始化块和构造器,这些都不是在创建Shape对象时被调用的,而是在创建其子类的实例时被调用。
抽象类的子类:
package fang_abstract;
public class Triangle extends Shape{
private double a;
private double b;
private double c;
public Triangle(String color,double a,double b,double c) {
super(color);
this.setSides(a,b,c);
}
public void setSides(double a,double b,double c) {
if(a>=b+c||b>=a+c||c>=a+b) {
System.out.println("三角形两边之和必须大于第三边");
return;
}
this.a=a;
this.b=b;
this.c=c;
}
public double calPerimeter() {
return a+b+c;
}
public String getType() {
return "三角形";
}
}
package fang_abstract;
public class Circle extends Shape{
private double radius;
public Circle(String color,double radius) {
super(color);
this.radius=radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public double calPerimeter() {
return 2*Math.PI*radius;
}
public String getType() {
return getColor()+"圆形";
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Shape s1 = new Triangle("黑色",3,4,5);
Shape s2 = new Circle("黄色",3);
System.out.println(s1.getType());
System.out.println(s1.calPerimeter());
System.out.println(s2.getType());
System.out.println(s2.calPerimeter());
}
}
运行结果:
执行Shape的初始化块……
执行Shape的构造器……
执行Shape的初始化块……
执行Shape的构造器……
三角形
12.0
黄色圆形
18.84955592153876
抽象类不能创建实例,只能当成父类被继承。