1.1 抽象类概念
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
由于Animal不是某个具体的动物,所以bark()方法无法具体实现,而狗和猫是具体的动物,其bark()可以实现,因此Animal可以设计为抽象类
像这样没有实际工作的方法我们可以把它设计成抽象方法,包含抽象方法的类称为抽象类
1.2 抽象类语法
在Java中,一个类如果被 abstract 修饰称为抽象类,抽象类中被 abstract 修饰的方法称为抽象方法,抽象方法不用
给出具体的实现
abstract class Shape{
abstract public void draw();
// 抽象类也是类,也可以增加普通方法和属性
public double getArea(){
return area;
}
protected double area;
}
1.3 抽象类特性
1. 抽象类不能直接实例化对象
Shape shape=new Shape(); //error Shape是抽象类,无法实例化
2. 抽象方法不能是 private 的
abstract class Shape {
abstract private void draw();
}
//error
抽象方法没有加访问限定符时,默认是public
3. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写
abstract public final void func1();//error
abstract public static void func2();//error
4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰
//矩形类
class Ract extends Shape{
public double len;
public double wid;
@Override
public void draw() {
System.out.println("画一个矩形");
}
@Override
public double getArea() {
return len*wid;
}
}
// 三角形类
abstract class Triangle extends Shape {
private double a;
private double b;
private double c;
@Override
public void draw() {
System.out.println("画一个三角形");
}
//double calcArea(); //编译失败:要么实现该抽象方法,要么将三角形设计为抽象类
}
5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类
6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变量