linkin大话面向对象--接口
- 接口(interface)的概念,掌握接口很重要,以后所有的编程都要面向接口编程。其实接口的内涵就7个字:规范和实现分离。
抽象类是从多个类中抽象出来的模板,若要将这种抽象进行得更彻底,就得用到一种特殊的“抽象类”:接口。
生活中听说过的USB接口其实并不是我们所看到的那些插槽,而是那些插槽所遵循的一种规范;而我们看到的那些插槽是根据USB规范设计出来的实例而已,也就说插槽是USB的实例;对应不同型号的USB设备而言,他们各自的USB插槽都需要遵循一个规范,遵守这个规范就可以保证插入插槽的设备能与主板正常通信;对于同一种型号的主板上的多个USB插槽,他们有相同的数据交换方式,相同的实现细节,可认为他们都是同一个类的不同实例。
- 接口,类,对象示意图
接口只定义了类应当遵循的规范,却不关心这些类的内部数据和其方法内的实现细节。
接口只规定了这些类里必须提供的方法,从而分离了规范和实现,增强了系统的可拓展性和维护性。
- interface定义
接口定义一种规范,规定一个类必须做什么,但它不管如何具体去做;
[修饰符] interface 接口名 extends 父接口1,父接口2....
1,没有构造方法,不能实例化
2,接口只能继承接口,不能继承类
3,接口里没有普通方法,方法全是抽象的
4,接口里的方法默认修饰符是public abstract
5,接口里的字段全是全局常量,默认修饰符是public static final
接口里的成员包括:全局常量,公共的抽象方法,内部类(包括内部类,内部接口,内部枚举类)。主要是前两个。
接口的名字,符合标识符就OK,一般的我们习惯在接口名前加上"I"字母,用于区分类和接口,一般的,若接口叫IUSB,习惯上把它的实现类(子类)类写为MouseUSBImpl,主要是方便阅读
- 使用接口
格式:public class SubImpl extends Super implements IA,IB。实现接口(支持多实现)
[修饰符] class 类名 implements 接口1,接口2...
1,接口的实现必须在 extends 之后
2,实现接口的方法必须是 public 类型
3,接口不能创建实例,但是可以声明引用类型的变量。
此时,引用类型的变量必须指向到其实现类对象。
IStudent s = new String();
IStudent s = new StudentImpl();
- 接口和抽象类
相同点:
1,都位于继承的顶端,用于被其他实现或继承
2,都不能实例化
3,都包含抽象方法,其子类都必须覆写这些抽象方法
区别:
1,抽象类为部分方法提供实现,避免子类重复实现这些方法,提供代码重用性;接口只能包含抽象方法
2,一个类只能继承一个直接父类(可能是抽象类),却可以实现多个接口;(接口弥补了Java的单继承)
二者的选用:
优先选用接口,尽量少用抽象类,编程时都是面向接口编程的
需要定义子类的行为,又要为子类提供共性功能时才选用抽象类,其实主要是模板。
linkin大话面向对象--接口的更多相关文章
- linkin大话面向对象--类和对象
我们每天在撸码,那么我们在敲什么东西呢?明显的我们在写类,写一个类,写一个接口,写某个接口里面写一些属性,在某个类里面写一个方法,然后以一个对象调用方法,对于j2ee来讲的话,可能还会写一些jsp,静 ...
- linkin大话面向对象--闭包和回调
先来理解2个概念:闭包和回调 什么是闭包? 闭包是一个可调用的对象,它记录了一些信息,这些信息来自于创建他的作用域.通过这个定义,可以看出内部类是面向对象的闭包,因为他不仅包含了外部类对象的信 ...
- linkin大话面向对象--内部类
内部类说白了就是类中有类 内部类:嵌套类 外部类:宿主类 内部类主要有以下作用:记住了3个字:多继承... 1,内部类提供了更好的封装,可以把内部类隐藏在外部类中,不允许同一个包中的其他类访问该类. ...
- linkin大话面向对象--枚举
枚举类(enum) 其实我们使用到枚举的地方还是很多的,其实我们可以完全人工的来实现枚举的功能.比如说我现在手里的项目我就是自己实现的枚举,说白了,枚举就是一个类的多例模式. 1,使用enum声明,默 ...
- linkin大话面向对象--多态
java引用变量有2个类型,一个是编译时类型,一个是运行时类型: 编译时类型:声明的类型,把它看做是什么东西 运行时类型:真正的类型,实际上指的是什么东西 如果编译时类型和运行时类型不同,就出现多态. ...
- linkin大话面向对象--包和导入
我们现在的代码都扔在一个文件夹里面,比如以后我们做项目,是不是有可能有非常非常多的代码,那我就希望把不同功能和模块的类方便管理,放到不同的文件夹下,引出包概念. 什么是包,就一个文件目录,为了处理重名 ...
- linkin大话面向对象--GC和jar包
GC java的垃圾回机制是java语言的重要机制之一.当程序创建对象,数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存区中.当这块内存不再被任何变量引用时,这块内存就 ...
- linkin大话面向对象--包装类
Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢? 基本数据类型 包装类 byte Byte short Short int Int ...
- linkin大话面向对象--java关键字
java中的关键字有以下几个,他们不能作任何其它的用途. 发现没,java中的关键字全是小写,java是严格区分大小写的. abstract default null synchronized ...
随机推荐
- ionic2 安装(一)
1.安装java JDK 2.安装nodejs 3.安装最新版ionic 指令:npm install ionic@latest 4.安装cordova 指令:npm install -g cordo ...
- The `XXXX` target overrides the `HEADER_SEARCH_PATHS` build setting defined in `Pods/Target Support Files/Pods-game-desktop/Pods-game-desktop.release.xcconfig'. This can lead to prob
The `game-desktop [Release]` target overrides the `HEADER_SEARCH_PATHS` build setting defined in `Po ...
- DAY5-小别-2018-1-15
有两天没有写了,前天考完试出去浪了,惭愧自己没有学习:昨天,启程回家看完了循环内容的视频,晚上十点半火车到站,没抽出时间写了,还看了<黑客帝国>,有点小感触,人工智能的时代即将到来,我们该 ...
- linux交换空间
swap空间有两种形式:一是交换分区,二是交换文件.总之对它的读写都是磁盘操作. linux内存通过 virtual memory 虚拟内存来管理整个内存, 虚拟内存管理着物理内存,也管理着swap交 ...
- Ajax提交Form表单的一种方法
待提交的表单 <form id="updatePublicKey" enctype="multipart/form-data"> <div c ...
- Maven教程(1)--maven的下载、安装与配置
Maven下载 下载地址:http://maven.apache.org/download.cgi 下载后,解压得到 Maven目录分析: bin文件夹:含有mvn运行的脚本 boot文件夹:含有pl ...
- Git基础命令使用(个人总结)
个人在开发中整理常用的git命令,相信很多人会需要到的. 全局配置信息: git config --global user.name "Your name" git config ...
- python与ssh交互
由于pexpect模块在windows上不能运行,官方给出的. 所以我使用了paramiko模块进行我们的交互. 我的linux是Debian Kali Linux 64位 首先我们要进vim的/et ...
- linux(六)之文本操作
接下来我们一起来看一下再linux中怎么去对文本进行操作的 一.文本文件 既然要操作文本,所以我们要对文本有一个了解,那什么是文本文件呢. 文本文件是一种由若干行字符构成的计算机文件.文本文件存在于计 ...
- D. Longest Subsequence
D. Longest Subsequence time limit per test 2 seconds memory limit per test 256 megabytes input stand ...