继承多态接口异常DOC.docx

上传人:b****5 文档编号:8522714 上传时间:2023-01-31 格式:DOCX 页数:9 大小:28.76KB
下载 相关 举报
继承多态接口异常DOC.docx_第1页
第1页 / 共9页
继承多态接口异常DOC.docx_第2页
第2页 / 共9页
继承多态接口异常DOC.docx_第3页
第3页 / 共9页
继承多态接口异常DOC.docx_第4页
第4页 / 共9页
继承多态接口异常DOC.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

继承多态接口异常DOC.docx

《继承多态接口异常DOC.docx》由会员分享,可在线阅读,更多相关《继承多态接口异常DOC.docx(9页珍藏版)》请在冰豆网上搜索。

继承多态接口异常DOC.docx

继承多态接口异常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记录日志信息

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1