大家好,我是IT修真院深圳分院第5期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务1中,为什么要使用interface好处是什么。
一、背景介绍
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,一个类通过继承接口的方式,从而来继承接口的抽象方法。或者简单点来讲,接口就像一种约定,我们约定某些类可以实现某种方法,那么这些类就一定能实现某种方法。
二.知识剖析
接口的特点
1.Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量。(一个值的本身,我们可以叫为常量;不可变的变量)
2.接口中的方法默认都是public,abstract类型的(都可省略)没有方法体。
3.接口中没有构造方法,不能被实例化。(构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载)(实例化是指在面向对象的编程中,通常把用类创建对象的过程称为实例化)
4.一个接口不能实现(implements)另一个接口,但它可以继承(extends)其他多个接口。
5.Java接口必须通过类来实现它的方法
6.当一个类实现了某个Java接口时,它必须实现接口中所有抽象方法,否则这个类必须声明为抽象类
7.一个类只能继承一个直接的父类,但可以实现多个接口,间接实现了多继承(,接口名)
三.常见问题
1.接口和类的区别是什么
2.接口中的成员变量和类的属性的区别是什么
3.为什么要使用接口,接口+实现(Impl)好处是什么
四.解决方案
1.接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念;类描述对象的属性和方法。接口则包含类要实现的方法。
2.成员变量和属性的区别:从使用者的角度看没有什么区别,都是依附在对象上的数据。从类设计的角度看,属性是通过方法访问的数据,写一个属性,可能会影响多个数据,而读取属性,得到的是方法的返回结果,也可能是多个数据运算得到的值。成员变量直接就是对象的数据,用户代码可直接读写。 成员变量作用范围是整个类,定义在方法体和语句块之外,一般定义在类的声明之下。属性是只局限于类中方法的声明,不与其他的类成员相关。
3.1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。
3.2、简单、规范性:如果一个项目比较庞大,那么先定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了。
3.3、维护、拓展性:比如要做一个程序,其中里面有一个类,满足不了所需要的功能,又需要要重新设计这个类,如果这个类被其他地方引用,修改起来很麻烦。假如一开始就定义了一个接口,通过类实现这个接口,这样修改的时候只不过是引用另一个类而已,就达到维护、拓展的方便性。
3.4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些。
六、扩展思考
1.service和dao的区别是什么:
答:service是业务层,dao是数据访问层。
可以在service里直接调用dao,service里面就new一个dao类对象,然而业务才是工作中的重中之重。
标准主流现在的编程方式都是采用MVC综合设计模式,MVC本身不属于设计模式的一种,它描述的是一种结构,最终目的达到解耦,解耦说的意思是你更改某一层代码,不会影响我其他层代码,如果你会像spring这样的框架,你会了解面向接口编程,表示层调用控制层,控制层调用业务层,业务层调用数据访问层。初期也许都是new对象去调用下一层,比如你在业务层new一个DAO类的对象,调用DAO类方法访问数据库,这样写是不对的,因为在业务层中是不应该含有具体对象,最多只能有引用,如果有具体对象存在,就耦合了。当那个对象不存在,我还要修改业务的代码,这不符合逻辑。好比主板上内存坏了,我换内存,没必要连主板一起换。我不用知道内存是哪家生产,不用知道多大容量,只要是内存都可以插上这个接口使用。这就是MVC的意义。
service的意义,其实现在做东西分层次不是那么严格,举个最简单的例子,你做一个分页的功能,数据1000条,你20条在一个页,你可以把这个功能写成工具类封装起来,然后在业务层里调用这个封装的方法,这才是业务里真正干得事,只要没访问数据库的,都要在业务里。
2.抽象类和普通类的区别
答:普通类是一个完善的功能类,可以直接产生实例化对象,并且在普通类中可以包含有构造方法、普通方法、static方法、常量和变量等内容。而抽象类是指在普通类的结构里面增加抽象方法的组成部分。
那么什么叫抽象方法呢?在所有的普通方法上面都会有一个“{}”,这个表示方法体,有方法体的方法一定可以被对象直接使用。而抽象方法,是指没有方法体的方法,同时抽象方法还必须使用关键字abstract做修饰。
而拥有抽象方法的类就是抽象类,抽象类要使用abstract关键字声明。
3。dao和mapper有什么区别
答:mapper开发更好,原始dao开发存在以下问题:
存在一定量的模板代码。比如:通过SqlSessionFactory创建SqlSession;调用SqlSession的方法操作数据库;关闭Sqlsession。
存在一些硬编码。调用SqlSession的方法操作数据库时,需要指定statement的id,这里存在了硬编码。
而通过规范式的开发mapper接口,可以解决原始dao开发当中存在的问题:
1、 模板代码已经去掉;
2、 剩下去不掉的操作数据库的代码,其实就是一行代码。这行代码中硬编码的部分,通过第一和第二个规范就可以解决。
七、参考文献
张庆东师兄的PPT
详见视频
https://v.qq.com/x/page/i05399uy00p.html腾讯视频
感谢大家观看
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~
我的邀请码:19214843,
或者你可以直接点击此链接:http://www.jnshu.com/login/1/19214843
网友评论