一.抽象类和抽象方法必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,而抽象类中可以不含有抽象方法。
抽象类和抽象方法的特点如下:
1.抽象类,抽象方法必须使用abstract来修饰,并且抽象方法中不含有方法体。
2.抽象类不能被实例化,无法使用new关键字调用来调用抽象类的构造方法来创建实例。即使不含有抽象方法也不能创建实例。
3.抽象类可以包含属性和方法,构造器,初始化块,内部类,枚举类。抽象类的构造器主要用于其子类构造器的调用。
abstract class shape{
{
System.out.println("执行shape的初始代码块");
}
private String color;
public String getColor(){
return this.color;
}
public void setColor(){
this.color=color;
}
public shape(){
System.out.println("执行shape的构造器");
}
public shape(String color){
this.color=color;
}
//定义一个计算周长的抽象方法
public abstract double calPerimeter();
//定义一个返回形状的抽象方法
public abstract String getType();
}
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.a=a;
this.b=b;
this.c=c;
}
//重写计算周长的方法
public double calPerimeter(){
return a+b+c;
}
public String getType(){
return "三角形";
}
}
class Circle extends shape{
private double radius;
public double getRadius() {
return radius;
}
public void setRadius(double radius) {
this.radius = radius;
}
public Circle(String color,double radius){
super();
this.radius=radius;
}
@Override
public double calPerimeter() {
// TODO Auto-generated method stub
return 2*Math.PI*radius;
}
@Override
public String getType() {
// TODO Auto-generated method stub
return "圆形";
}
}
public class AbstractDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
shape s1= new Triangle("黑色",4,3,3);
shape s2= new Circle("红色",3);
System.out.println(s1.calPerimeter()+s1.getType());
System.out.println(s2.calPerimeter()+s2.getType());
}
}