Java 抽象类

一:什么是抽象类?

在面向对象的概念中在,所有的对象都是通过类来描绘的,但反过来讲,并不是所有的类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这个类就是抽象类。父类包含了之类集合的常用方法,但是由于父类本身是抽象的,所以不能使用这些方法。

抽象类是指不允许被实例化的类;抽象方法是没有方法体的方法。

  1. 抽象类可以不包括抽象方法,反正它不会被实例化,里面的方法是不是抽象的本质上没有任何影响。
  2. 但是含有抽象方法的类绝不能被实例化,否则执行这个方法的时候,应该怎么办!
  3. 如果子类是非抽象的,那么它就必须实现父类中的抽象方法;否则,它继承来的抽象方法仍然没有方法体,也是个抽象方法,因此之类必须实现父类的抽象方法。

二:抽象类可以被继承吗?

  1. 抽象类可以被继承。
  2. 抽象类除了不能被实例化对象之外,类的其他功能依然存在,成员变量、成员方法及构造方法的访问方式和普通的类一样。
  3. 由于抽象类不能被实例化对象,所以抽象类必须被继承才能使用。也正因如此,在设计阶段决定要不要设计抽象类。

三:知识汇总

  1. abstract 是一个修饰符;
  2. 使用 abstract 修饰的类是抽象类;
  3. 使用 abstract 修饰的方法是抽象方法,抽象方法没有方法体;只能进行功能定义,没有功能实现,功能实现由之类完成;
  4. 实现抽象方法,就是给抽象方法加上方法体,去掉 abstract 修饰;
  5. 抽象类的目的:该类不能被实例化对象,只能被继承;
  6. 抽象方法一定在抽象类中成立;
  7. 抽象类中不一定由抽象方法,比如不想让某个类有对象,可以创建为抽象类;
  8. final 修饰的类不能被继承;
  9. final 修饰的成员方法不能被覆写;
  10. 抽象类就是用于被继承的;
  11. 抽象方法就是用于被覆写的;
  12. 因而 final 和 abstract 不能同时出现;
  13. 一个类若想继承一个抽象类,必须实现该抽象类的所有抽象方法;
  14. 一个抽象类如果想要继承一个抽象类,可以实现0~N个抽象方法;
  15. 虽然抽象类不能被创建对象,但是抽象类有构造方法,因为之类创建对象需要调用父类然后调用 Object 实现;
  16. abstract 是不能修饰静态方法的,因为静态方法不能被覆写;
  17. 抽象方法与成员方法一样,仅仅是没有方法体而已;
  18. 抽象方法必须被覆写,成员方法根据需求覆写;

四:抽象类应用场景

  • 例如我们在定义父类的时候,仅仅知道父类的功能,不知道如何实现时;

  • 举例:动物会运动;但是运动的方式不一样,有天上飞的、地下跑的、水里游的…

  • 这是,我们就能定义为抽象类说明功能,具体的实现由实现类去完成;

五:代码示例

(1)父类

1
2
3
4
5
6
7
8
9
public abstract class Animal {

public String name;
public int age;

public abstract void run();

public abstract void call();
}

(2)子类

1
2
3
4
5
6
7
8
9
10
11
public class Cat extends Animal{
@Override
public void run() {
System.out.println("猫在地上跑~");
}

@Override
public void call() {
System.out.println("喵喵叫~");
}
}
1
2
3
4
5
6
7
public abstract class Fish extends Animal{
@Override
public void run() {
System.out.println("鱼在水中游...");
}

}
1
2
3
4
5
6
7
public class GoldFish extends Fish {

@Override
public void call() {
System.out.println("金鱼咕咕叫~");
}
}

(3)测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Demo {
public static void main(String[] args) {
GoldFish goldFish = new GoldFish();
goldFish.call();
goldFish.run();
Cat cat = new Cat();
cat.call();
cat.run();
}
}


金鱼咕咕叫~
鱼在水中游...
喵喵叫~
猫在地上跑~