抽象类

概念

Java中可以定义被abstract关键字修饰的方法,这种方法只有声明,没有方法体,叫做抽象方法.
Java中可以定义被abstract关键字修饰的类,被abstract关键字修饰的类叫做抽象类,抽象类中的方法不做限制,全为普通方法、全为抽象方法、抽象方法与普通方法并存

  1. 如果一个类含有抽象方法,那么它一定是抽象类
  2. 抽象类中的方法实现交给子类来完成

一个子类继承了一个抽象父类,有两种方案

  1. 变成抽象子类,“躺平”,也不实现,继续抽象
  2. 实现抽象子类中的所有抽象方法,“父债子偿”

    语法格式

    1. abstract class 类名{}
    2. 修饰符 abstract 返回值类型 方法名(参数列表);

    示例

    ```java package cn.tedu.oop;

public class AbstractDemo { public static void main(String[] args) {

  1. }

}

//被abstract修饰的类为抽象类,若一个类中包含抽象方法,那么这个类必须被声明为一个抽象类 abstract class Car{ public void start(){ System.out.println(“启动发动机”); }

  1. public void stop(){
  2. System.out.println("熄火了");
  3. }
  4. /*
  5. 被abstract修饰的方法是抽象方法,抽象方法没有方法体
  6. 添加抽象方法后,抽象方法所在类必须为抽象类
  7. */
  8. public abstract void run();
  9. public abstract void run1();

}

/ 当一个子类继承抽象的父类后有两种解决方法 1.变成抽象子类,”躺平“,也不实现,继续抽象 2.实现抽象子类中的所有抽象方法,”父债子偿“ / abstract class BMW extends Car{

}

class TOYOTA extends Car{ @Override public void run(){ System.out.println(“跑起来了”); }

  1. @Override
  2. public void run1() {
  3. System.out.println("快的要起飞了");
  4. }

}

  1. <a name="q8y9n"></a>
  2. ## 注意事项
  3. _抽象类有构造方法,但抽象类不可实例化<br />创建构造函数的意义:不为了自己使用,而是为了子类创建对象时使用_
  4. <a name="TtztB"></a>
  5. ### 示例
  6. <a name="JHnzV"></a>
  7. #### 抽象类中构造函数的使用
  8. ```java
  9. package cn.tedu.oop;
  10. /**
  11. * 用于测试抽象类中构造函数的使用
  12. */
  13. public class AbstractDemo2 {
  14. public static void main(String[] args) {
  15. /*
  16. Biological b = new Biological();
  17. 无法创建父类的对象---报错
  18. */
  19. Human h = new Human();
  20. }
  21. }
  22. /*
  23. 抽象类有构造方法,但抽象类不可实例化
  24. 创建构造函数的意义:不为了自己使用,而是为了子类创建对象时使用
  25. */
  26. abstract class Biological{
  27. public Biological() {
  28. System.out.println("生物类的无参构造");
  29. }
  30. }
  31. class Human extends Biological{
  32. public Human() {
  33. super();
  34. System.out.println("人类类的无参构造");
  35. }
  36. }

抽象类中成员变量的使用

  1. package cn.tedu.oop;
  2. public class AbstractDemo3 {
  3. public static void main(String[] args) {
  4. }
  5. }
  6. /*
  7. 如果父类中都是普通方法,那为什么要定义成抽象类?
  8. 因为抽象类不可以被实例化,如果不想让别人创建本类
  9. 就可以把普通类定义成抽象类
  10. 抽象类中可以定义抽象方法,也可以全都为抽象方法
  11. */
  12. abstract class Fruit{
  13. /*
  14. 抽象类中可以创建成员变量,可以创建成员常量
  15. */
  16. int sum = 100;
  17. final String name = "水果";
  18. /*
  19. 抽象类中可以定义普通方法,也可以全都是普通方法
  20. */
  21. public void clean(){
  22. System.out.println("水果要洗洗再吃");
  23. }
  24. public abstract void grow();
  25. public abstract void eat();
  26. }
  27. class Apple extends Fruit{
  28. @Override
  29. public void grow() {
  30. System.out.println("苹果成熟需要时间");
  31. }
  32. @Override
  33. public void eat() {
  34. System.out.println("苹果可以削皮再吃");
  35. }
  36. }