您的位置:首页 > 其它

接口-抽象类-内部类

2018-03-06 18:58 99 查看
引言
一、接口
接口是什么?
为什么使用接口?
怎么使用接口?
二、抽象类和接口
什么是抽象类?
抽象类和接口的区别有哪些?
共同点:
差异点:
注意:
三、内部类
什么是内部类?
为什么使用内部类?
参考


引言

温水煮蛤蟆……致安逸的你

工作一段时间后很多基础知识都还给老师了,现在我们一起把这些先找回来。不管你是准备面试还是复习基础都可以参考本文。部分内容源于网络知识的梳理和总结。如有错误欢迎指摘。

一、接口

接口是什么?

接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。接口(Interface)是一组抽象方法的集合。接口中定义的方法没有方法体,它们以分号结束。

为什么使用接口?

作为编程的统一标准或规范,利于团队协同开发
降低类的依赖性,提高类间的独立性,使实现类和接口分离,减少硬编码和代码量剧增
便于维护,扩展性强,在系统设计阶段把公共行为和容易拓展的部分抽取出接口,能使系统更加灵活。
规范、扩展、回调


怎么使用接口?

interface修饰接口
接口之间可以使用extends关键字继承
类使用implements关键字实现接口
借助接口可以实现多重继承(即实现多个接口)


二、抽象类和接口

什么是抽象类?

在类定义前面添加abstract关键字,这个类就是抽象类。抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。

抽象类和接口的区别有哪些?

共同点:

都不能被实例化,只能被继承和实现
都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。


差异点:

接口里可以有方法,但是没有方法的实现。而抽象类则可以。
接口里只能定义静态常量,不能定义普通成员变量。但是抽象类都可以定义。
接口无构造器,抽象类有。但是抽象类的构造器不是用于创建对象,而是让其子类调用这些构造器来完成属于抽象类的初始化操作。
接口里不能包含初始化块,但抽象类里完全可以包含初始化块。
一个类最多只能有一个直接父类,包括抽象类,但一个类可以直接实现多个接口,通过实现多个接口可以弥补Java单继承不足。


注意:

接口和抽象类的区别不能只从具体功能上来区分,而是可以从使用动机上来分析。
抽象类是为了代码的复用,而使用接口的动机是为了实现多态性。
抽象类和它的子类之间应该是公共和特殊的关系,而接口仅仅是它的子类应该实现的一组规则。


三、内部类

什么是内部类?

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。

成员内部类
定义在另外部类里面,可以访问外部类的成员。外部类不能直接访问内部类的成员,外部类需要拿到内部类的对象才能访问。
内部类和外部类存在同名成员时,内部类默认访问内部类的成员。
成员内部类依赖于外部类而存在。

静态内部类
通过关键字static修饰的内部类,静态内部类是不需要依赖于外部类而存在,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法

匿名内部类
没有名字的内部类。
匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。

局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。


为什么使用内部类?

间接弥补了多重继承的不足,外部类已经继承了一个父类,如果还需要继承另一个类,可以让内部类来继承,这样外部类也可以访问内部类的方法,间接实现多重继承。
匿名内部类可以方便的实现闭包。
内部类提供了更好的封装,除了该外围类,其他类都不能访问
父类和子类方法重名时,可以把子类的方法放在内部类中,解决了这种问题


参考

https://www.zhihu.com/question/20111251

https://course.tianmaying.com/java-basic+abstract-class-and-interface#1

《接口与抽象类的区别》–by winton_by

http://blog.csdn.net/wenwen091100304/article/details/48381023

《内部类》

https://www.cnblogs.com/dolphin0520/p/3811445.html

内部类 抽象类 接口 java基础
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: