抽象

1.抽象

什么是抽象

       关于抽象的定义,百度官方给出了比较精确的解释,百度之抽象定义从具体事物抽出、概括出它们共同的方面、本质属性与关系等,而将个别的、非本质的方面、属性与关系舍弃,这种思维过程,称为抽象。简单来说,即从众多事物中忽略细枝末节,提取出核心共有属性的思维过程

为什么需要进行抽象

       从上面有关抽象的定义,我们就不难发现为什么人们需要对事物进行抽象,抽象作为一个思维过程,容许人们忽略同一类事物某些方面的不同之处,使得我们不必过于拘泥于细枝末节,如此我们的智力和精力方可得到很大程度上的解放,为我们解决同类和其他类问题,提供了更多的可能,由此生产效率得到提高。

2.抽象类

什么是抽象类

       面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类(来源于百度官方定义)。

       在笔者的理解中,包含抽象方法的类即是抽象类(至于什么是抽象方法,笔者会在下一节进行论述)。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。笔者需要提醒读者的是:如果一个类用abstract修饰,里面却没有抽象方法,也是抽象类,只不过没有意义。

抽象类有什么作用

       抽象类就是为了继承而存在的,至于继承有什么作用,请读者自行翻阅、查找网上资料或者直接参照笔者在java基础篇之面向对象的论述。需要提醒读者的是:如果定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为不能用它来做任何事情。还有就是,因为抽象类中方法不包含具体的业务代码,仅仅是方法的声明,无法实现功能,所以不能用抽象类创建对象(不能实例化抽象类)。

抽象类的特征有哪些

       1.抽象类的修饰符使用abstract;

       2.抽象类里一般包含一个或两个以上的抽象方法,(注意:如果一个类使用abstract进行修饰,但是却不含有抽象方法,也能称为是抽象类,只不过没有多大意义);
       3.抽象类不能实例化,抽象类必须被继承才能使用;
       4.抽象类除了不能实例化,仍具有类的其他一般特征,成员变量、成员方法和构造方法的访问方式和普通类一样。

什么时候使用抽象类

       对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

抽象类和普通类的区别和联系

      抽象类不能创建对象,即不能抽象类不能被实例化。

3.抽象方法

什么是抽象方法

       抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。【简单理解就是“光说不做”】。抽象方法一般存在于抽象类或者接口当中。抽象方法必须用abstract关键字进行修饰。

       声明格式:abstract void sleep();

       注意:直接在普通类中写抽象方法会报错。

抽象方法有什么作用

       由于抽象方法只有声明,并没有具体的实现。笔者之前也提到,抽象的目的,在于继承,子类必须拥有在父类中的抽象方法,由于抽象方法只有方法头,没有方法体,子类在实现这些方法的时候,还需要完善方法体。不同子类在该方法体内因为可以有着不同的内容结构,所以在表现的结构和内容形式上也会有着差异。在一定程度上,实现了代码的复用性(也有人称之为“代码的重用性”,哈哈,这点无所谓了,就好比是,我们不必纠结于土豆和马铃薯在称呼上为什么不同一样偷笑)。

抽象方法有哪些特征

       根据上面抽象方法的概念,我们不难得出抽象方法的以下几点特征:
       1.抽象方法只有声明,并没有具体实现。也可以称之为,只有方法名,但是却没有方法体。
       2.抽象方法必须用修饰符abstract来进行修饰。
       3.抽象方法一般是写在抽象类当中,不能写在普通类当中,因为写在普通类当中会出现报错。

什么时候使用抽象方法

       笔者定义这个标题其实是不合时宜的,只是为了显示抽象方法和抽象类目录结构形式上的一致性,才这样划分的。抽象方法一般是定义在抽象类和接口中的,脱离抽象类和接口,单独来谈什么时候使用抽象方法是不合时宜的。在紧接着的一级标题(3.接口),笔者会给大家介绍接口,并给大家分析下接口和抽象类之间的区别和联系。

抽象方法和抽象类小结

       抽象方法只需声明,而不需实现某些功能。而含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写。 抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类。

3.接口

接口的概念

       在日常项目开发的过程中,我们经常会听到接口这一称呼,对于初学者而言,有时候很难真正区别到底什么是接口,笔者在这里主要给读者分析下,我理解中的接口,包含Interface和API(Application Programming Interface),希望能给存在疑惑的朋友提供自己的拙见。
       1.Interface(接口)
       关于java接口,百度官方这样定义:一系列方法声明的集合,在这个集合里,只有方法名,没有方法的实现,集合里面的方法可以在不同的地方被实现,而这些实现可以拥有不同的行为(或功能)。
       在笔者看来,这里的java接口也可以理解为抽象方法的集合,从接口的定义上,或多或少会觉得接口和抽象类不是一样的吗?后面笔者再介绍接口和抽象类到底有哪些区别和联系,以及各自的优缺点。

       2.API(Application Programming Interface:应用程序编程接口)

       百度给的官方解释为:API是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

       3.日常工作中提到的接口的概念大都是指,系统对外开放的一个窗口。其他人通过这个接口可以访问你的系统,从而返回一些对其他人有用的数据。

接口和抽象类的区别


      
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值