关键字
    interface接口的深入解析
        先说结论,接口的出现是为了打破类(只能描述一类事物的特性,对于某些不属于任何一个类的,界定不清楚的行为无法正确描述,很难用类描述清楚的行为,如果强行用类去描述,那么继承去该类的子类都拥有这种特性,但现实是子类是没有这种特性的,例如捕猎,你把写在动物的抽象类里面,但不是每一种动物都具备捕猎这项技能的,但继承于该抽象类的动物都继承了这项技能,也就意味着都会捕猎,这显然是不符合逻辑,也造成了方法资源的浪费)的逻辑的局限性。
        接口的使用其实和抽象类的使用更类似一点,只不过接口不具备类的特性而已
        接口的出现不仅是为了描述这类事物,而且能让这类事物更好的配合多态去使用(所以接口其实也是可以看作一个基类型的)

        什么时候该用接口而不是用抽象类
            1.要实现的方法(功能)不是当前类族的必要(行为)描述
            2.要为不同类族实现同样的方法(功能),其实这就是打破了类的单继承性
            3.其实这两者都是突破了类的概念的局限性,有些确实是用一类事物是描述不清楚的
            注意点:不要将接口的意义和多态的意义混为一谈,多态只是接口的其中的一个意义,当然这也是接口当中非常重要的意义

 abstract抽象类的深度解析
        先说结论,抽象类的出现是为了更好的实现多态,专门来刻画现实中大家都有同样的功能,但每个人实现的又不一样,例如吃东西,大家都会吃东西,但大家吃东西的方法都不尽相同,如果单带用普通类继承去实现的话,意味着他们吃东西的方式都一样,这显然不符合逻辑,如果不把吃东西的方法写在基类上,仅仅只是在每个人那里写一个吃东西的方法,这样当去调用吃东西的方法的时候,就需要为每个人吃东西的方式专门定制一个方法,这样就造成方法的重载了,而不能使用多态,以不变应万变,大大降低了效率,平白无故编写了很多方法,浪费了资源。所以抽象类的出现就是来描述这类现实事物,配合多态的使用,更好的提高代码的效率,可以以不变应万变。顺便说一句,抽象类的设计思想就是模板式设计思想(作为基类更的刻画现实事物配合多态使用)

类的深度理解,继承的深度理解
        java没有对类进行分类,我自身的理解是将类分成两种,一种是基类,一种是实体类,基类是来描述一类事物的抽象性,概念性描述,是一类事物,而实体类是来描述某个实体事物的抽象性,概念性描述,不是一类事物,区别很大。基类又再细分成两种,一种是普通基类(object),一种是抽象基类,普通基类刻画的是大家不仅用有同一个功能,并且实现都一样,而抽象基类是用来刻画大家都有同样的功能,但实现不一样的。
        继承的深度理解:继承隐含的逻辑关系是is a,子类是父类的一种,而接口隐含的是有没有这种行为,具体接口深度理解在上面写了
    多态的深度理解
        前面写过多态的理解,写的是多态实现出来后的效果,现在写的是理解怎样才能实现多态这种效果的。多态的基础是继承和覆盖重写,对象的向上转型,继承让基类可以指向不同类型的子类,为多态接受任何不同类型的子类打下基础(或者说动态绑定不同的实现子类打下基础),而覆盖重写,因为接受的是不同类的子类(指向不同类型的子类对象),那对应的功能也应该随着指向的变化而变化,而方法覆盖重写就可以实现这种变化。最后是向上转型,使用向上转型让子类转变成基类才能以基类的身份接受不同类型的子类对象(指向不同类型的子类对象)。
    补充两个关键字
        static
            从两个角度去理解
                1.实际使用意义
                    用static修饰的属性或方法标志着他是属于类的,是为他的实例对象所共享的,也就是说对他的每一个实例对象都是一样的
                2.生命周期
                    用static修饰的结构是随着类的加载而加载的,而类只加载一次就保存在缓冲区里了,至于非静态结构就是随着对象的加载而加载的,每个对象都独立的拥有一套类的非静态结构,而对于静态结构则是共享一套,对于每个对象都是一样的。根据二者的生命周期不一样,静态不能调用非静态,而非静态可以调用静态,因为对象的加载要晚于类的加载,静态要想调用非静态结构只能通过创建对应类的对象才能调用,也就是要加载了对象才能调用。
        final就从他意义上理解即可,就是最终的,不可变的。用来修饰方法,说明该方法就是最终版本了,不可被覆盖重写,用来修饰类,说明该类就是最终版本了,不能被继承
            对于一些要变化的结构是不能修饰的,如构造器,抽象方法,抽象类,接口,静态的修饰也没有意义,本质上本身对于大家都是一样的。属性修饰也没有意义。
    补充类和接口的深度理解
        1
            类可以作为基类,也可以作为一个个体类(不存在继承关系的类),普通的类(非抽象类)作为基类的时候是作为一个真模板(不仅做的事情一样,做的方式也要求一模一样)。而抽象类作为基类的时候是作为一个假模版(要求做的事情一样,但做的方式不一样)。关于真模板和假模版的大白话理解:例如我要求两个人都要在两天内在王者荣耀这款游戏中打上荣耀王者,A学生选择了找五个NB的好朋友组队上分打到荣耀王者,B同学选择了上淘宝付费请了个代练打上荣耀王者。这就是他们做的事情一样(都是两坛之内打上荣耀王者),做的方式不一样(一个是找好朋友五排上分打上荣耀王者的,一个是花钱请代练打上荣耀王者的)
        2
            而接口也是作为一个假模版存在的,但与抽象类的假模版不一样。一个是只对行为的假模版(动态特征),一个是对事物的假模版(静态特征(属性)加动态特征(行为)),对于一些行为难以划分到一类事物的时候就需要用到接口了。例如:飞行这项行为,如果你把这类行为划分到动物这类事物的话,明显逻辑错误了。因为鸟是动物,也会飞,但鳄鱼也是动物,但他不会飞,所以就产生逻辑矛盾了,所以就需要接口出现去刻画这些行为了
        3
            要区分开类作为基类(或者说是模板)和个体类的使用,设计类的时候还是有很大区别的。类如果作为继承出现的话,并且不是继承的最后一个的话,那就是作为基类使用了。接口就必定是作为模板来使用了,抽象类也是必定是作为模板来使用了,因为抽象类和接口本身都不能造对象。抽象类必定存在继承关系,而接口必定存在实现关系,继承在类里面出现就必定有类作为模板来使用。而接口一旦出现实现关系就必定作为模板来使用了。
        4
            但是要注意一个非常重要的点。我们用一个类去继承一个类(模板),或者说去实现一个接口(模板),我们除了可以在做的事情和这些模板是一样的情况下照着他们来做,还可以加入一些自己的个性化需求(也就是模板里面没有做过的事情)关键字
    interface接口的深入解析
        先说结论,接口的出现是为了打破类(只能描述一类事物的特性,对于某些不属于任何一个类的,界定不清楚的行为无法正确描述,很难用类描述清楚的行为,如果强行用类去描述,那么继承去该类的子类都拥有这种特性,但现实是子类是没有这种特性的,例如捕猎,你把写在动物的抽象类里面,但不是每一种动物都具备捕猎这项技能的,但继承于该抽象类的动物都继承了这项技能,也就意味着都会捕猎,这显然是不符合逻辑,也造成了方法资源的浪费)的逻辑的局限性。
        接口的使用其实和抽象类的使用更类似一点,只不过接口不具备类的特性而已
        接口的出现不仅是为了描述这类事物,而且能让这类事物更好的配合多态去使用(所以接口其实也是可以看作一个基类型的)
        什么时候该用接口而不是用抽象类
            1.要实现的方法(功能)不是当前类族的必要(行为)描述
            2.要为不同类族实现同样的方法(功能),其实这就是打破了类的单继承性
            3.其实这两者都是突破了类的概念的局限性,有些确实是用一类事物是描述不清楚的
            注意点:不要将接口的意义和多态的意义混为一谈,多态只是接口的其中的一个意义,当然这也是接口当中非常重要的意义
    abstract抽象类的深度解析
        先说结论,抽象类的出现是为了更好的实现多态,专门来刻画现实中大家都有同样的功能,但每个人实现的又不一样,例如吃东西,大家都会吃东西,但大家吃东西的方法都不尽相同,如果单带用普通类继承去实现的话,意味着他们吃东西d额方式都一样,这显然不符合逻辑,如果不把吃东西的方法写在基类上,仅仅只是在每个人那里写一个吃东西的方法,这样当去调用吃东西的方法的时候,就需要为每个人吃东西的方式专门定制一个方法,这样就造成方法的重载了,而不能使用多态,以不变应万变,大大降低了效率,平白无故编写了很多方法,浪费了资源。所以抽象类的出现就是来描述这类现实事物,配合多态的使用,更好的提高代码的效率,可以以不变应万变。顺便说一句,抽象类的设计思想就是模板式设计思想(作为基类更的刻画现实事物配合多态使用)
    类的深度理解,继承的深度理解
        java没有对类进行分类,我自身的理解是将类分成两种,一种是基类,一种是实体类,基类是来描述一类事物的抽象性,概念性描述,是一类事物,而实体类是来描述某个实体事物的抽象性,概念性描述,不是一类事物,区别很大。基类又再细分成两种,一种是普通基类(object),一种是抽象基类,普通基类刻画的是大家不仅用有同一个功能,并且实现都一样,而抽象基类是用来刻画大家都有同样的功能,但实现不一样的。
        继承的深度理解:继承隐含的逻辑关系是is a,子类是父类的一种,而接口隐含的是有没有这种行为,具体接口深度理解在上面写了
    多态的深度理解
        前面写过多态的理解,写的是多态实现出来后的效果,现在写的是理解怎样才能实现多态这种效果的。多态的基础是继承和覆盖重写,对象的向上转型,继承让基类可以指向不同类型的子类,为多态接受任何不同类型的子类打下基础(或者说动态绑定不同的实现子类打下基础),而覆盖重写,因为接受的是不同类的子类(指向不同类型的子类对象),那对应的功能也应该随着指向的变化而变化,而方法覆盖重写就可以实现这种变化。最后是向上转型,使用向上转型让子类转变成基类才能以基类的身份接受不同类型的子类对象(指向不同类型的子类对象)。
    补充两个关键字
        static
            从两个角度去理解
                1.实际使用意义
                    用static修饰的属性或方法标志着他是属于类的,是为他的实例对象所共享的,也就是说对他的每一个实例对象都是一样的
                2.生命周期
                    用static修饰的结构是随着类的加载而加载的,而类只加载一次就保存在缓冲区里了,至于非静态结构就是随着对象的加载而加载的,每个对象都独立的拥有一套类的非静态结构,而对于静态结构则是共享一套,对于每个对象都是一样的。根据二者的生命周期不一样,静态不能调用非静态,而非静态可以调用静态,因为对象的加载要晚于类的加载,静态要想调用非静态结构只能通过创建对应类的对象才能调用,也就是要加载了对象才能调用。

 final就从他意义上理解即可,就是最终的,不可变的。用来修饰方法,说明该方法就是最终版本了,不可被覆盖重写,用来修饰类,说明该类就是最终版本了,不能被继承
            对于一些要变化的结构是不能修饰的,如构造器,抽象方法,抽象类,接口,静态的修饰也没有意义,本质上本身对于大家都是一样的。属性修饰也没有意义。
    补充类和接口的深度理解
        1
            类可以作为基类,也可以作为一个个体类(不存在继承关系的类),普通的类(非抽象类)作为基类的时候是作为一个真模板(不仅做的事情一样,做的方式也要求一模一样)。而抽象类作为基类的时候是作为一个假模版(要求做的事情一样,但做的方式不一样)。关于真模板和假模版的大白话理解:例如我要求两个人都要在两天内在王者荣耀这款游戏中打上荣耀王者,A学生选择了找五个NB的好朋友组队上分打到荣耀王者,B同学选择了上淘宝付费请了个代练打上荣耀王者。这就是他们做的事情一样(都是两坛之内打上荣耀王者),做的方式不一样(一个是找好朋友五排上分打上荣耀王者的,一个是花钱请代练打上荣耀王者的)
        2
            而接口也是作为一个假模版存在的,但与抽象类的假模版不一样。一个是只对行为的假模版(动态特征),一个是对事物的假模版(静态特征(属性)加动态特征(行为)),对于一些行为难以划分到一类事物的时候就需要用到接口了。例如:飞行这项行为,如果你把这类行为划分到动物这类事物的话,明显逻辑错误了。因为鸟是动物,也会飞,但鳄鱼也是动物,但他不会飞,所以就产生逻辑矛盾了,所以就需要接口出现去刻画这些行为了
        3
            要区分开类作为基类(或者说是模板)和个体类的使用,设计类的时候还是有很大区别的。类如果作为继承出现的话,并且不是继承的最后一个的话,那就是作为基类使用了。接口就必定是作为模板来使用了,抽象类也是必定是作为模板来使用了,因为抽象类和接口本身都不能造对象。抽象类必定存在继承关系,而接口必定存在实现关系,继承在类里面出现就必定有类作为模板来使用。而接口一旦出现实现关系就必定作为模板来使用了。
        4
            但是要注意一个非常重要的点。我们用一个类去继承一个类(模板),或者说去实现一个接口(模板),我们除了可以在做的事情和这些模板是一样的情况下照着他们来做,还可以加入一些自己的个性化需求(也就是模板里面没有做过的事情)

抽象类和接口的深度解析相关推荐

  1. java alarm api_JAVA抽象类及接口使用方法解析

    抽象类可以有自己的成员变量,继承抽象类的对象共用成员变量,也可以修改成员变量的值.可以有非抽象的方法. 接口只能有static final的成员变量(一般不使用),只能有抽象的方法. public a ...

  2. 你不知道的Runnable接口,深度解析Runnable接口

    本文描述的是Android中的Runnable接口 .因Android中的线程源自于Java,所以首先需要了解Java中的线程,有关Java中的线程请看这篇文章Android(线程一) 线程  ! J ...

  3. Java 的抽象特性:抽象类与接口深度解析

    要点: 抽象类 接口 抽象类与接口的差别 一. 抽象 对于面向对象编程来说,抽象是它的四大特征之中的一个. 在Java中,能够通过两种形式来体现OOP的抽象:接口和抽象类. 接口和抽象类为我们提供了一 ...

  4. 以两种异步模型应用案例,深度解析Future接口

    摘要:本文以实际案例的形式分析了两种异步模型,并从源码角度深度解析Future接口和FutureTask类. 本文分享自华为云社区<[精通高并发系列]两种异步模型与深度解析Future接口(一) ...

  5. 【深度解析】第三方支付的分类、接口与支付流程

    原标题:[深度解析]第三方支付的分类.接口与支付流程 目录 - - - - - 1. 概述 2. 支付环节 3. 分类 4. 银行接口 如今第三方支付已经发展的非常成熟,但是至今仍未有一个比较权威的定 ...

  6. 详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

  7. 【转】详细解析Java中抽象类和接口的区别

    在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...

  8. 详细解析Java中抽象类和接口的区别(很容易理解错)

    2007-09-28 12:17作者:doublel出处:论坛整理责任编辑:方舟 在Java语言中, abstract class 和interface是支持抽象类定义的两种机制.正是由于这两种机制的 ...

  9. 视频教程:Java常见面试题目深度解析!

    视频教程:Java常见面试题目深度解析! Java作为目前比较火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数.很多java程序员在学成之后,会面 ...

最新文章

  1. K8S面试大通关!赶紧收藏!
  2. 几句话就能让你明白:IPv6与Voip
  3. boost::test模块类属性工具的单元测试
  4. 月薪多少才算80后中的人生赢家?他们的经济、婚姻、生活方式是怎样的
  5. Vue表格中,对数据进行转换、处理
  6. Android系统充电系统介绍-预防手机充电爆炸
  7. ipfs-hdfs分布式文件系统
  8. L1-046 整除光棍
  9. 《浪潮之巅》读书笔记3
  10. apple watch 指南
  11. 常用图形渲染API简介
  12. 我是一个硬件工程师,面试官随口问了这些问题 | 收藏
  13. 一个身份证号能申请多少个微信公众账号?
  14. MySql 系列三:事务
  15. 手把手教学 | B端产品经理简历撰写指南(含专业话术+多套虚拟简历模板)
  16. 三星刷android n,三星n9008怎么刷机 三星n9008刷机图文教程
  17. element-ui的用户头像上传默认显示图片
  18. Netty 支持哪些常用的解码器?
  19. OpenSTF技术知识与组件解读
  20. C# IHttpContextAccessor 获取路由信息

热门文章

  1. 老师应该如何教少儿编程课
  2. Android O适配
  3. Pandas 时间差(Timedelta)
  4. 《互联网金融投资理财一册通》导读
  5. 2019-9-2-一粒在时空轮回的粒子会发生什么
  6. 爬虫学习(5):豆瓣、Steam账号PC端登录(登录篇一)
  7. 计算机考试应用函数公式计算,2020计算机考试:WPS文字的表格中进行函数公式计算...
  8. 哈工大-机器学习-实验二:Logistic Regression
  9. Executor框架详解
  10. git push origin master提交报错解决办法