抽象类

抽象类的概念

什么是抽象

  1. 抽象类(Abstract Class): 在面向对象编程中,抽象类是一个不能被实例化的类,它通常包含抽象方法。抽象方法是没有实现的方法,它只声明了方法的签名,具体的实现留给子类去完成。

这里有一个规则:既然父类里面的方法是抽象的,那么对于整个类来说,它就有一个没有实现的方法,这个方法不知道怎么去实现,那么这个类是就是残缺不全的,因此这个类应该被定义为一个抽象类。

 Java语言规定,当一个类里面有抽象方法的时候,这个类必须被声明为抽象类。

 /**
   * 父类Animal
 * 在class的前面加上abstract,即声明成这样:abstract class Animal
 * 这样Animal类就成了一个抽象类了
   */
   abstract class Animal {
  
      public String name;
  
      public Animal(String name) {
          this.name = name;
      }
      
      /**
       * 抽象方法
       * 这里只有方法的定义,没有方法的实现。
       */
      public abstract void enjoy(); 
      
  }
  
  /**
   * 这里的子类Cat从抽象类Animal继承下来,自然也继承了Animal类里面声明的抽象方法enjoy(),
   * 但子类Cat觉得自己去实现这个enjoy()方法也不合适,因此它把它自己也声明成一个抽象的类,
   * 那么,谁去实现这个抽象的enjoy方法,谁继承了子类,那谁就去实现这个抽象方法enjoy()。
   * @author gacl
   *
   */
  abstract class Cat extends Animal {
  
      /**
       * Cat添加自己独有的属性
       */
      public String eyeColor;
  
      public Cat(String n, String c) {
          super(n);//调用父类Animal的构造方法
          this.eyeColor = c;
      }
  }
  
  /**
   * 子类BlueCat继承抽象类Cat,并且实现了从父类Cat继承下来的抽象方法enjoy
   * @author gacl
   *
   */
  class BlueCat extends Cat {
  
      public BlueCat(String n, String c) {
          super(n, c);
      }
  
      /**
       * 实现了抽象方法enjoy
       */
      @Override
      public void enjoy() {
          System.out.println("蓝猫叫...");
      }
      
  }
  
  /**
   * 子类Dog继承抽象类Animal,并且实现了抽象方法enjoy
   * @author gacl
   *
   */
  class Dog extends Animal {
      /**
       * Dog类添加自己特有的属性
       */
      public String furColor;
  
      public Dog(String n, String c) {
          super(n);//调用父类Animal的构造方法
          this.furColor = c;
      }
  
      @Override
      public void enjoy() {
          System.out.println("狗叫....");
      }
  
  }
 
  public class TestAbstract {
  
     
      public static void main(String[] args) {
  
          /**
           * 把Cat类声明成一个抽象类以后,就不能再对Cat类进行实例化了,
           * 因为抽象类是残缺不全的,缺胳膊少腿的,因此抽象类不能被实例化。
           */
          //Cat c = new Cat("Catname","blue");
         Dog d = new Dog("dogname","black");
         d.enjoy();//调用自己实现了的enjoy方法
         
         BlueCat c = new BlueCat("BlueCatname","blue");
         c.enjoy();//调用自己实现了的enjoy方法
     }
 }

为什么要抽象? (提高代码复用性。灵活性)

  1. 简化复杂性

    • 抽象允许开发者专注于高层次的概念,而不是被复杂的细节所困扰。这有助于理解和处理复杂的系统。
  2. 提高可读性

    • 通过抽象,代码更加简洁和清晰,其他开发者可以更容易地理解代码的意图和功能。
  3. 增强可维护性

    • 抽象使得代码更容易维护,因为改变底层实现不会影响使用该实现的高层代码。
  4. 促进代码重用

    • 抽象使得开发者可以创建可重用的组件,这些组件可以在不同的项目和上下文中使用。
  5. 支持扩展性

    • 抽象使得在不修改现有代码的情况下扩展系统成为可能。例如,通过继承和多态性,可以添加新的行为而不影响现有系统。
  6. 实现多态性

    • 抽象是实现多态性的基础,允许以统一的方式处理不同类型的对象。
  7. 分离关注点

    • 抽象帮助分离系统的不同方面,使得开发者可以独立地工作在系统的不同部分,而不必担心其他部分的实现细节。
  8. 促进模块化

    • 抽象支持模块化设计,每个模块可以独立开发和测试,然后组合在一起形成完整的系统。
  9. 提高安全性

    • 通过封装实现的抽象,可以隐藏内部实现细节,只暴露必要的接口,从而提高系统的安全性。
  10. 支持设计模式的应用

    • 抽象是设计模式的基础,设计模式提供了解决常见设计问题的模板,它们利用抽象来简化设计过程。
  11. 适应变化

    • 在软件开发过程中,需求经常变化。抽象使得系统更容易适应这些变化,因为高层设计可以保持稳定,而底层实现可以灵活调整。
posted @ 2024-08-12 19:57  糊涂图-4060  阅读(32)  评论(0)    收藏  举报