为什么需要抽象类

动物Animal都有自已的行为,小鸟和老虎继承了动物的行为
但小鸟和老虎的行动方式不一样
在动物类中能给出行动的具体实现吗?

什么是抽象类

使用abstract关键字修饰的方法叫做抽象方法,抽象方法没有方法体

当一个类中包含了抽象方法,那么该类也必须使用abstract关键字来修饰
这种使用abstract关键字修饰的类就是抽象类

抽象类及抽象方法定义的语法格式

  1. [修饰符]abstract class类名{
  2. //定义抽象方法
  3. [修饰符] abstract方法返回值类型 方法名([参数列表])
  4. //其他方法或属性
  5. }
  1. public abstract class Animal{//拥有抽象方法的类,必须是抽象类
  2. //属性
  3. public String name;
  4. Animal(){
  5. this.name = "小花虎";
  6. }//抽象类可以拥有构造方法,但是不能通过new + 构造的方式创建对象,没有实际意义,主要是完成对抽象类本身的一些初始化工作
  7. //方法,行为
  8. public abstract void move();
  9. }
  1. public class Bird extends Animal{//鸟是动物
  2. @Override //重写父类的方法
  3. public void move(){
  4. System.out.println("小鸟在天上飞");
  5. }
  6. }
  1. public class Tiger extends Animal{
  2. @Override //重写父类的方法
  3. public void move(){
  4. System.out.println("老虎在地上跑");
  5. }
  6. }
  1. public class Test {
  2. public static void main(String[] args){
  3. // Animal a = new Animal();//不能实例化这种类型,因为他是抽象的,无法给你具体的
  4. Animal a1 = new Bird();//a1是Bird对象的上转型对象
  5. Animal a2 = new Tiger();
  6. a1.move();
  7. a2.move();
  8. }
  9. }

抽象类可以拥有构造方法,但是不能通过**new + 构造**的方式创建对象,没有实际意义,主要是完成对抽象类本身的一些初始化工作