首页 > 其他分享 >抽象类

抽象类

时间:2024-08-12 20:06:36浏览次数:7  
标签:enjoy Cat 抽象 Animal 抽象类 public

抽象类的概念

什么是抽象

  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. 适应变化

    • 在软件开发过程中,需求经常变化。抽象使得系统更容易适应这些变化,因为高层设计可以保持稳定,而底层实现可以灵活调整。

标签:enjoy,Cat,抽象,Animal,抽象类,public
From: https://www.cnblogs.com/jmy3/p/18355641

相关文章

  • 抽象类和接口
    抽象类和接口抽象类publicabstractclassAnimal{protectedStringname;publicAnimal(Stringname){this.name=name;}publicabstractvoidmakeSound();//抽象方法publicvoideat(){System.out.prin......
  • Java中的抽象类与接口
    1.抽象类1.1抽象类概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。比如:像这种没有实际工作的方法,我们可以把它设计成一个抽象方法(abst......
  • 抽象类与接口
    目录抽象类的概念1.什么是抽象(与具体类相对)2.为什么要抽象抽象类的好处抽象类和接口的区别抽象类的概念1.什么是抽象(与具体类相对)Java专门提供了一种机制,名为“抽象方法”。它属于一种不完整的方法,只含有一个声明,没有方法主体。下面是抽象方法声明时采用的语法:abstractvoidX......
  • 类,抽象类,接口作为方法参数类型的传参 day10
    /*形式参数基本类型:引用类型:类:当你看到一个类作为方法参数类型的时候,将来调用时需要传递该类及其该类的子类对象抽象类:当你看到一个抽象类作为方法的参数类型的时候,将来调用时需要传递继承该抽象类的具体子类对象......
  • 类,抽象类,接口作为方法的返回值类型 day10
    /*返回值类型基本类型:引用类型:类:当你看到一个类作为方法的返回值类型的时候,将来方法内部应该返回该类或该类的子类对象抽象类:当你看到一个抽象类作为方法的返回值类型的时候,将来方法内部应该返回继承该抽象类的具体子类对象......
  • C#:具体类=>抽象类=>接口的进化过程详解
    文章目录简单复习继承与多态具体类抽象类及成员使用语法接口抽象类到接口的进化简单复习继承与多态下面,我用一个交通工具的例子来快速复习一下.1.首先我定义一个基类Vehicle,代表交通工具的总称.里面定义了一个可被重写的成员方法Run.classVehicle{......
  • 抽象类
    抽象类1.抽象类的概念1.什么是抽象“抽象”在编程中通常指的是从具体事物中提取出共同特性或行为,忽略掉细节和差异,形成一个更高层次的、更一般的概念或表示。这种过程允许我们关注于事物的本质,而不是具体的实现细节。2.为什么要抽象Java中的抽象类(AbstractClass)是一种特殊的......
  • Java SE核心技术——9抽象类
    面向对象编程(Object-OrientedProgramming,简称OOP)和面向过程编程(Procedure-OrientedProgramming)是两种不同的编程范式,它们在设计和实现软件时采用了不同的方法和哲学。一、面向对象编程核心概念:面向对象编程的核心是"对象",对象可以包含数据(属性)和代码(方法)。万物皆对象。封......
  • Android开发 - Presenter抽象类解析
    Presenter是什么职责:Presenter的主要职责是管理视图(通常是用户界面组件)的显示和行为它不处理数据的逻辑,而是专注于如何展示数据在Leanback库中的作用:Leanback库是为AndroidTV设计的一个库,提供了一些特殊的UI组件,比如BrowseFragment。Presenter在L......
  • Java中的抽象类
    目录抽象类抽象类为什么要抽象?抽象类的特征与用法抽象类的好处抽象类、实现类、接口的区别注意抽象类抽象就是从多个事物中将共性的,本质的内容抽取出来。抽象类Java中可以定义没有方法体的方法,该方法的具体实现由子类完成,该方法称为抽象方法,包含抽象方法的类就是抽象类。​......