一、抽象类
class Shape {
public void draw() {
}
}
class Rect extends Shape{
@Override
public void draw() {
System.out.println("♦");
}
}
class Circle extends Shape {
@Override
public void draw() {
System.out.println("○");
}
}
class Flower extends Shape {
@Override
public void draw() {
System.out.println("❀");
}
}
class Triangle extends Shape {
@Override
public void draw() {
System.out.println("△");
}
}
1.1 语法规则
我们从以上的代码可以发现,父类Shape中的draw方法是一个空方法,没有什么实际的功能,具体的实现都是通过子类重写draw方法来实现的,因此像这种没有什么实际功能的方法可以将其设计为抽象方法,而包含抽象方法的类叫抽象类。
abstract class Shape {
abstract public void draw();
}
- 在方法前加abstrcat关键字,表示这是一个抽象方法,同时抽象方法没有方法体;
- 在类名前面加abstract关键字,表示这是一个抽象类
1.2 注意事项
- 抽象类不能直接实例化.
Shape shape = new Shape();
// 编译出错
像这样的代码会报错,抽象类不能直接实例化
- 抽象类中可以和普通类一样拥有成员变量和方法,这个非抽象方法和普通方法的规则都是一样的, 可以被重写,也可以被子类直接调用
abstract class shape{
public int age;
public static int count;
public void func() {
}
public abstract void draw();
}
- 抽象类是可以被继承的,并且可以发生向上转型
public class TestDemo {
public static void drawMap(Shape shape) {
shape.draw();
}
public static void main(String[] args) {
drawMap(new Rect());
drawMap(new Circle());
}
}
- 当一个普通类继承的抽象类,当前普通类一定要重写抽象类当中的抽象方法
class Shape {
public void draw() {
}
}
class Rect extends Shape{
@Override
public void draw() {
System.out.println("♦");
}
}
- 抽象方法不能是私有的,因为抽象方法就是通过继承来实现细