Java OOP——第四章 异常
1、 接口:接口就是给出一些没有内容的方法,封装到一起,到某个类要使用的时候,在根据具体情况把这些方法写出来。
接口是更加抽象的抽象的类, 抽象类里的方法可以有方法体, 接口里的所有方法都没有方法体。 接口体现了程序设计的多态和高内聚低偶合的设计思想。 |
|||
接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合,但是没有方法的实现。 |
|||
接口可以看作一种特殊的“抽象类”,但是采用与抽象类按群不同的语法来表示; |
|||
抽象类有利于代码的重用,接口有利于代码的扩展和维护; |
|||
接口的特性: 接口不可以被实例化 实现类必须实现接口的所有方法 // 常作为类型使用 实现类可以实现多个接口 //Java中的多继承 接口中的变量都是静态常量,(属性都是全局静态常量,方法都是全局抽象方法) |
接口有比抽象类更好的特性: 1.可以被多继承 2.设计和实现完全分离 3.更自然的使用多态 4.更容易搭建程序框架 5.更容易更换实现 |
||
接口注意事项: 1、接口不能被实例化 2、接口中所有的方法都不能有主体。错误语法例:void aaa(){}←(注意不能有花括号),接口可以看作更加抽象的抽象类。 3、一个类可以实现多个接口,非抽象类实现接口时必须实现接口中的全部方法,(抽象类利于代码复用,接口利于代码维护) 4、接口中可以定义常量(int a=1;//加不加static都是静态的,不能用private和protected修饰),不能定义变量 ★接口中可以有变量[但变量不能用private和protected修饰],接口中的变量,本质上都是static的而且是final类型的,不管你加不加static修饰。 访问形式:接口名.变量名 ★在java中,把常用的变量,定义在接口中,作为全局变量使用,接口中的属性都会自动用public static final修饰,即接口中的属性都是全局静态变量; 5、一个接口不能继承其它的类,但是可以继承别的接口 6、接口名命规则与类相同,public在整个项目中可见,如果省略,则只能在当前包中可见; 7、一个重要的原则:当一个类实现了一个接口,要求该类把这个接口的所有方法全部实现,否则必须定义为抽象类; 8、接口中所有方法都是抽象方法,接口中方法都会自动调用public abstract修饰;即接口中只有全局抽象方法; 9、和抽象类一样,接口也不能实例化,接口中不能有构造方法; 10、接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但不能继承类; |
|||
JAVA中接口的定义语法: 修饰符 interface 接口名 extends父接口1,父接口2,……{ //常量定义 //方法定义 } |
使用接口:eg:usb接口: |
类接口的实现语法: class 类名 extends父类名 implements 接口1,接口2,……{ //类成员 } |
2、 使用接口:一个类只能有一个直接父类,但可以通过implements实现多个接口,当类在继承父类的同时又实现了多个接口时,extends关键字必须位于implements关键字之前;
编码实现 |
eg:防盗门实现过程: |
接口表示一种能力:体现在接口的方法上 ●面向接口编程:
|
接口是一种约定:体现在接口名称和注释上; ●面向接口编程:程序设计时面向接口的约定而不考虑具体实现;
|
3、在C#中定义接口语法:
语法: |
实现语法:
|
Eg:定义接口: |
定义实现类: |
注意事项: 接口之间可以通过“:”来实现继承关系,一个接口可以继承多个接口,但接口不能继承类; 类只能继承一个父类,但可以实现多个接口,使用“:”来继承类并实现接口; 接口定义零个或多个成员,成员主要是方法、属性和索引器。接口中不能包含常量、变量和构造方法,也不能包含任何静态成员; 接口中成员访问修饰符时public,定义接口时显示指定任意修饰符都是非法的; 按照惯例,C#中接口以大写字母“I“开头; |
4、JAVA接口与C#接口对比:
|
JAVA |
C# |
定义 |
interface |
interface |
实现 |
implements |
: |
静态成员 |
常量 |
无 |
public |
可以显示使用 |
不能显示使用 |
5、抽象类与接口应用方式:
抽象类 不能对字段抽象(因为字段只能用等号赋值,没其他代码(不同于属性),没什么抽象的意义); 不能对 private 抽象; 可以含有非抽象的成员; 不能实例化; 只能从一个类继承; 可以被抽象类继承,此时不必实现抽象成员; 可以被普通类继承,此时必须实现抽象成员(网上有些说的不必实现,其实那有错误,普通类继承自抽象类时,必须实现抽象类的全部抽象成员); 实现抽象成员时要加 override; |
接口: 不能对字段接口(因为字段只能用等号赋值,没其他代码(不同于属性),没啥接口的意义); 接口只能是 public 的,且不能使用 public 关键字; 除了接口成员,不能有其他任何实现代码; 不能实例化; 可以从多个接口继承; 可以被接口继承;此时不必也无法实现接口成员; 可以被抽象类继承,此时必须实现接口成员; 可以被普通类继承,此时必须实现接口成员; 实现接口不能加 override,必须加 public。 |
7、附加:
●java的继承是单继承,也就是一个类最多只能有一个父类,这种单继承的机制可保证类的纯洁性,比C++中的多继承机制简洁。但是不可否认,对子类功能的扩展有一定影响。所以: 1、 实现接口可以看作是对继承的一种补充。(继承是层级式的,不太灵活。修改某个类就会打破继承的平衡,而接口就没有这样的麻烦,因为它只针对实现接口的类才起作用); 2、实现接口可在不打破继承关系的前提下,对某个类功能扩展,非常灵活。 |
|
●接口是一个抽象类,接口中的方法是一个就有public访问修饰符的方法,接口中的属性是一个静态常量; 接口中的方法默认为public abstract,即使不写。接口中的方法不能被static修饰。 |
|
|
|
●接口的描述: |
|
●接口类型实现类对象,也是多态的一种表现; ●接口是一个特殊的抽象类,接口中的所有方法都是抽象方法,所有的属性都是静态常量; |
|
接口是Java提供的一个面向对象的机制; 接口可以继承接口; 使用接口是为了降低模块之间的耦合度; 一个类中可以实现多个接口:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征,没有方法的实现, 因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能); 接口中只可以定义常量不可以定义变量是:如果接口可以定义变量,但是接口中的方法又都是抽象的,在接口中无法通过行为来修改属性; |
|
●一个类实现接口,接口与实现类之间就是父-子关系 ●接口中定义的都是全局的公共的常量,会默认加上修饰符public、static、final。 ●声明接口: |
|
接口里变量只能是静态常量,必须赋值; 方法必须抽象方法; 接口只能使用public进行修饰,或者省略; |
|
●eg:
分析: 接口中定义的属性都是静态常量,4个选项中没有修改该常量, 所以没有异常,因此选择c; |
●eg: 分析: 在java一般的用法中,如果要用普通类来实现接口,则必须实现该接口中的所有方法,这样就会导致需要实现多余的方法; 采用抽象类来实现方法,可以实现该接口中的部分方法,而且当其他类继承该抽象类时,只需要实现抽象类中未实现的方法即可。 例: 抽象类B只实现了接口A中的方法a、b, 当类C继承类B时,只需要实现B中未实现的接口c即可。 一般情况下,类C中的方法a、b都是调用父类B的方法a、b |
●eg:
|
●eg:
分析: 调用study()方法时,要站在study()方法所在位置分析, 因为kid对象位于main方法里,并没有将age=5以参数形式传给study()方法中。 因此,study()方法在运行时,默认调用的是类下面的age成员变量。 |
● 接口不能包含具体方法,所以接口不能继承类(继承抽象类也不行)。 接口可以继承多个更小的接口,这也是接口常用设计思路的基础: 先细分程序功能,把每个独立的小功能都定义成微型接口,再以继承的方式,用小接口拼装出大型的多功能接口,方便为不同客户的具体需求实现定制化接口。发布和暴露给用户使用的是多功能的大接口;单一职能的众多小接口则保留给自己,因为每个小接口功能独立且互不依赖,方便调试和维护。 值得注意的是,抽象类可以继承普通类,实现以普通类为基础,扩充抽象方法。 C#中,有所谓“扩展方法”的设定,无需继承也可以扩充一个现有类的方法。 |
|
●接口中只能声明静态常量,声明变量时可以不用final static 关键字,但必须赋初始值。 接口中的方法是默认或公开的抽象方法,不能有方法体;可以省略abstract关键字。 |
|
●public和abstract关键字可以修饰类和接口,接口名后无有() final可以修饰类但不能修饰接口; |
|
●Java接口与抽象类的区别, 接口只能存在public成员,而抽象类可以存在public,private,protected,default成员; 接口只能存在抽象方法,抽象类存在抽象方法和实例方法。 接口只能存在静态常量,而抽象类可以存在实例成员; 接口没有构造方法,而抽象类存在。 |
Java OOP——第四章 异常的更多相关文章
- Java OOP——第五章 异常
1. 尝试通过if-else来解决异常问题: Eg: public class Test2 { public static void main(String[] args) { ...
- OOP第四章博客
OOP第四章博客作业 (1)本单元作业架构设计 1)针对于第一次作业,我是将所给类进行了自己的封装,在MyUmlInteraction类里面进行关系的建立,这里把所给的UmlClass建立好,同时有i ...
- “全栈2019”Java多线程第四章:设置和获取线程名称
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- “全栈2019”Java第九十四章:局部内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第十四章:二进制、八进制、十六进制
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java基础知识二次学习--第四章 异常
第四章 异常处理 时间:2017年4月26日11:16:39~2017年4月26日11:28:58 章节:04章_01节 04章_02节 视频长度:20:46+01:16 内容:异常的概念 心得: ...
- JAVA基础第四章-集合框架Collection篇
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...
- Java oop 第13章_多线程
第13章_多线程 一. 多线程相关的概念: 程序:由某种编程语言开发可执行某些功能的代码组合,它是静态的概念. 进程:当程序被执行时的过程可以理解为讲程序从外存调入内存的过程,会为每一个程序 ...
随机推荐
- 解决Android报错No resource found that matches the given name (at 'text' with value '@string/hello').
解决Android项目No resource found that matches the given name (at 'text' with value '@string/hello'). 如图, ...
- Android性能优化之渲染篇
下面是渲染篇章的学习笔记,部分内容和前面的性能优化典范有重合,欢迎大家一起学习交流! 1)Why Rendering Performance Matters 现在有不少App为了达到很华丽的视觉效果, ...
- QTablewidget 简单例子
[1]QTableWidget简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件. 学习QTableWidget就要首先看看QTableView控件(控件也是有”家世“的!就像研 ...
- mantis统计报表和图形报表出现乱码问题的解决方法
Mantis 报表中文乱码 1.安装Mantis图表 1.0插件 administrator登录-------管理------插件管理,安装插件 2.上传字体simhei.ttf simsun.tt ...
- collectd配置
udp proxy - 192.168.48.112 cat > /etc/collectd_25801.conf << EOF Hostname "kvm-48-112& ...
- 基于alpine定制常用命令镜像
FROM alpine RUN apk update RUN apk add curl coreutils 像busybox.alpine镜像date命令都不是完整版的,不能执行加减的操作(date ...
- VC++动态链接库(DLL)编程
一.概论 1:http://www.pconline.com.cn/pcedu/empolder/gj/vc/0509/698632.html 2:http://pcedu.pconline.com. ...
- 【java开发系列】—— Tomcat编译报错
由于之前Eclipse里面有一个可移植性的web工程,但是在我很久没用后,再次登录这个IDE的时候就发现了问题. 首先,我的电脑里面有两个版本的JDK,1.6和1.7.两个版本的Tomcat6和7以及 ...
- 开发时复制aspx网页的方法
简单的copy /paste *.aspx网页,所使用的是同一个CodeBehind ,这往往不是我们所想要的!!!我们一般都希望使这两个网页具有各自的 *.cs文件.步骤:①新建一个Web ...
- git作业
第一部分 我的地址:https://github.com/Tohsaka-Rin-ZYJ/123/tree/master 第二部分 我对git的认识: Git是一个开源的分布式版本控制系统,用以有效. ...