继承多态接口异常DOC.docx
《继承多态接口异常DOC.docx》由会员分享,可在线阅读,更多相关《继承多态接口异常DOC.docx(9页珍藏版)》请在冰豆网上搜索。
继承多态接口异常DOC
一、继承
面向对象的三大特征:
封装、继承、多态
1、定义:
继承是软件可重用性的一种表现,新类可以在不增加自身代码的情况下,通过从现有的类中继承其属性和方法。
继承最基本的作用就是使得代码课重用,增加软件的可扩充性。
2、语法:
访问修饰符class子类名extends父类名{}
3、注意:
●子类不能继承父类的构造方法、private成员和子类与父类不同包且使用默认访问权限的成员。
●每个类只能有一个直接父类。
4、特点:
●可以继承public和protected修饰的属性和方法,不论子类和父类是否在同一个包里。
●可以继承默认访问修饰符修饰的属性和方法,但是子类和父类必须在同一个包里
●无法继承父类的构造方法(可以通过super关键字调用,且调用时必须是子类构造方法的第一句)。
●继承表达的是“**isa**”的关系。
●可以使用super关键字调用父类成员:
super只能出现在子类的方法和构造方法中,可以访问父类的属性、方法、构造方法;
●继承是多态的基础,没有继承就没有多态。
5、补充:
访问修饰符
本类
同包
子类
其他
private
√
默认的(Friendly)
√
√
protected
√
√
√
public
√
√
√
√
注:
protected:
不同包中只有实例化子类的对象可以调用protected成员。
6、实例化子类对象
●子类在实例化时,会首先执行其父类的构造方法,然后才执行子类的构造方法。
●一个类的构造方法在两种情况中总是会执行:
创建该类的对象和创建该类的子类的对象。
●子类继承父类时构造方法的调用规则:
如果子类的构造方法中没有通过super调用父类的有参构造方法,也没有通过this调用自身的其他构造方法,则系统会默认先调用父类的无参构造方法。
如果子类的构造方法中通过super调用父类的构造方法,那么将执行父类相应的构造方法。
如果子类的构造方法中通过this调用自身的其他构造方法,在相应构造方法中应用以上两条规则。
7、方法的重写
如果从父类继承的方法不能满足子类的需求,可以在子类中对父类的同名方法进行重写即覆盖。
要求:
Ø发生的两个类中(子类重写父类的方法);
Ø方法名必须相同;
Ø必须具有相同的参数列表(类型和个数);
Ø返回值类型必须相同或者是其子类;
Ø重写的方法的访问权限不能小于原方法的访问权限。
注:
构造方法不能重写
8、方法重写和方法重载的区别与联系
位置
方法名
参数表
返回值
访问修饰符
方法重写
子类
相同
相同
相同或是其子类
不能严于父类
方法重载
同类
相同
不同
无关
无关
9、final关键字
●Final类不能被继承
●Final方法不能被重写
●Final属性不能被修改,且必须有初始值
二、抽象方法和抽象类
1、定义:
当一个类的方法被abstract关键字修饰时,该方法称为抽象方法,抽象方法所在的类必须定义为抽象类。
2、语法:
抽象方法:
访问修饰符abstract返回类型方法名(参数列表);
抽象类:
abstractclass类名{}
3、特点
●抽象方法和抽象类需要用abstract修饰;
●抽象方法没有方法体,抽象类不能实例化;
●抽象方法必须在抽象类里面,而抽象类中可以包含抽象方法,也可以包含普通类的一切成员;
●如果父类是抽象类,那么其所有的抽象方法必须在子类中实现(通过重写),除非子类也是抽象类;
●Abstract修饰符不能喝final修饰符一起用;
●Private关键字不能修饰抽象方法。
三、多态
1、定义:
在程序设计的术语中,它意味着一个特定类型的变量可以引用不同类型的对象,并且能自动地调用引用的对象的方法。
方法重写是实现多态的基础。
2、2个要素:
子类重写父类方法、使用父类类型
3、向上转型(自动类型转换):
●子类到父类的转换
●语法:
父类型引用变量名=new子类型();
●此时通过父类引用变量调用的方法时子类覆盖或继承父类的方法,不是父类的方法;
●此时通过父类引用变量无法调用子类特有的方法。
4、向下转型(强制类型转换):
●父类类型转换为子类类型
●语法:
子类型引用变量名=(子类型)父类型的引用变量
●Instanceof运算符:
对象类型必须和其后面的参数所指的的类在继承上有上下级关系。
通常和强制类型转换结合使用,判断其真实子类类型。
5、优点
✧可替换性
✧可扩充性
✧接口性
✧灵活性
✧简化性
6、应用形式:
使用父类作为方法的形参
使用父类作为方法的返回值
四、接口
1、初识接口
接口可以看做一种特殊的抽象类,接口是一个不能实例化的类型,它里面的所有方法都是抽象方法。
2、语法
接口定义语法:
Publicinterface接口名{
//接口成员
}
实现接口语法:
Public类名implements接口名{
实现方法
普通方法
}
接口继承接口:
修饰符interface接口名extends父接口1,父接口2,......{
常量定义
方法定义
}
同时继承抽象类和实现多个接口语法:
Class类名extends父类名implements接口1,接口2,......{
类的成员
}
3、特点
●定义接口用interface修饰符,访问修饰符只能是public;
●接口要使用必须通过子类,子类通过implements关键字实现接口;
●实现接口的类必须实现接口中定义的所有抽象方法,接口的实现类可以包含普通方法;
●接口和抽象类一样不可以被实例化;
●实现类可以实现多个接口;
●接口中的成员只能是全局常量和公共的抽象方法;
●接口是一种能力,体现在接口的方法上(as...a);
●一个类只能继承一个父类,但恩给你同时实现多个接口,也可以同时继承抽象类和实现接口;
●可以切换实现类。
4、注意
●接口和类、抽象类是一个层次的概念,命名规则相同;
●修饰符只能是public,该接口在整个项目可见,如果省略修饰符,则只在当前包可见;
●接口中不能定义变量,所有的属性都默认用“publicstaticfinal”修饰且必须在定义时赋初始值不能更改;
●接口中的所有方法都是抽象方法,都默认为public;
●接口不能被实例化,不能有构造方法;
●接口之间通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类,类可以实现多个接口,但只能继承一个类;
●一个类必须实现其接口的全部方法,除非为抽象类;
●一个类在继承父类的同时又实现了多个接口时,extends必须位于implements之前。
五.异常
trycatchfinallythrowthrows
每个变量在使用前要判断其有效性
1、定义
异常就是在程序的运行过程中所发生的不正常事件,如所需文件找不到、网络连接不通或中断、算术运算出错、数组下标越界、装载一个不存在的类、对null对象操作、类型转换异常等。
异常会中断正在运行的程序。
2、try-catch
publicvoidmethod(){
try{
//代码段1
//产生异常的代码段2
//代码段3
}catch(异常类型ex){
//对异常进行处理的代码段4
}
//代码段5
}
使用try-catch处理异常:
可能出现的三种情况
1)如果try语句块中的所有语句正常执行完毕,不会发生异常,那么catch语句块总的所有语句都将会被忽略。
2)如果try语句块在执行过程中发生异常,并且与catch语句块中声明的异常类型想匹配,那么在try语句块中剩下的代码被忽略,而相应的catch语句块将会被执行。
匹配是值catch所处理的异常类型与所生成的异常类型一致或是它的父类。
3)如果try语句块在执行过程中碰到异常,而抛出的异常在catch语句块中没有被声明,那么方法立刻退出。
3、try-catch-finally
publicvoidmethod(){
try{
//代码段1
//产生异常的代码段2
}catch(异常类型ex){
//对异常进行处理的代码段3
return;
}finally{
//代码段4
}
}
使用try-catch-finally处理异常的两种情况:
1)如果try语句块中所有语句块正常执行完毕,那么finally语句块就会被执行。
2)如果try语句块在执行过程中碰到异常,无论这种异常能否被catch捕捉到,都将执行finally语句块中的代码。
注意:
finally语句块总的语句就算存在return语句也会执行,执行顺序是执行try语句块或catch语句块中return之前的语句,执行finally语句,执行return退出。
Finally语句块中的语句不执行的唯一情况是在异常处理代码中执行System.exit
(1)退出Java虚拟机。
4、多重catch
publicvoidmethod(){
try{
//代码段
//产生异常(异常类型2)
}catch(异常类型1ex){
//对异常进行处理的代码段
}catch(异常类型2ex){
//对异常进行处理的代码段
}catch(异常类型3ex){
//对异常进行处理的代码段
}
//代码段
}
排列顺序为子类到父类,最后一个一般都是exception类。
运行时,系统从上到下分别对每个catch语句块处理的异常类型进行检测,并执行第一个与异常类型匹配的catch语句。
执行其中的一条catch语句后,其后的catch语句将被忽略。
5、使用throws声明抛出异常
Throws可以同时声明多个异常,之间由逗号隔开。
6、使用throw抛出异常
●Throw用于程序员自行产生并抛出异常,throws用于声明该方法内抛出了异常;
●Throw位于方法体内部,可以作为单独的语句使用,throws必须跟在方法参数列表的后面,不能单独使用;
●Throw抛出一个异常对象,且只能一个,throws后面跟异常类,且可以跟多个异常类。
7、异常对象常用的方法
在catch语句中可以加入用户自定义处理信息,也可以调用异常对象的方法输出异常信息,常用方法如下:
ØVoidprintStackTrace():
输出异常的堆栈信息包括程序运行到当前类的执行流程,它将输出熊方法调用处到异常抛出处的方法调用序列。
ØStringgetMessage():
返回异常信息描述字符串,该字符串描述异常产生的原因,是printStackTrace()输出信息的一部分。
8、常见的异常类型
异 常 类 型
说 明
Exception
异常层次结构的父类
ArithmeticException
算术错误情形,如以零作除数
ArrayIndexOutOfBoundsException
数组下标越界
NullPointerException
尝试访问 null 对象成员
ClassNotFoundException
不能加载所需的类
IllegalArgumentException
方法接收到非法参数
ClassCastException
对象强制类型转换出错
NumberFormatException
数字格式转换异常,如把"abc
9、异常的分类
10、开源日志记录工具:
log4j(logforjava)
●在项目中加入log4j的JAR文件
●创建log4j。
Properties文件
●配置日志信息
●使用log4j记录日志信息