面向对象.docx
- 文档编号:29602504
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:16
- 大小:954.85KB
面向对象.docx
《面向对象.docx》由会员分享,可在线阅读,更多相关《面向对象.docx(16页珍藏版)》请在冰豆网上搜索。
面向对象
1、JAVA继承中方法的重写:
子类中要重写的方法权限必须大于父类中方法的权限,调用父类中方法用super.fun()
2、继承中属性的覆盖:
父类和子类中都有公共属性info,但是并不覆盖,可以通过super.info和this.info调用
书:
如果子类和父类中声明了相同名称的属性,则在子类中直接访问时采取就近原则,先找本类中的属性
3、super关键字的作用
可以从子类中调用父类中的构造方法、普通方法和属性,与this调用构造方法的要求一样,语句必须放在子类构造方法的首行
完整的代码示例:
输出:
this与super的区别:
序号
区别点
this
super
1
属性访问
访问本类中的属性,如果本类中没有此属性,
则从父类中继续查找
访问父类中的属性
2
方法
同属性访问,如果本类中没有此方法,
则从父类中查找
直接访问父类中方法
3
调用构造
调用本类构造,必须放在构造方法首行
调用父类构造,必须
放在子类构造方法首行
4
特殊
表示当前对象
无此概念
无论子类如何操作,最终必须要先调用父类中的构造方法
4、final关键字
声明需要注意的:
∙使用final声明的类不能被继承
∙使用final声明的方法不能被子类重写
∙使用final声明的变量即成为常量,不可修改
∙使用final声明常量时,要求全部字母大写
5、抽象类
抽象类的作用类似模板,不能直接由抽象类创建对象,只能通过抽象类派生新的类
抽象类——单继承
定义、使用规则:
∙包含一个抽象方法的类必须是抽象类
∙抽象类和抽象方法都要用abstract关键字声明
∙抽象方法只需声明不需要实现
∙抽象类必须由子类继承,子类(如果不是抽象类)必须重写抽象类中的全部抽象方法
下面是一个抽象类操作的示例:
抽象类中定义构造方法:
实例化继承抽象类的子类时,先调用抽象类的构造方法,在调用子类的构造方法,即在子类的构造方法第一行有super(),也可通过super(parameterA,parameterB)调用抽象类构造方法
6、接口
一种特殊的类,由全局常量和公共抽象方法组成
接口方法访问权限都默认为public
简化为:
接口的实现:
通过继承,子类通过implements关键字实现接口
class子类implements接口A,接口B{
}
子类可同时实现多个接口,多继承
示例:
在子类中必须重写接口中的全部抽象方法
继承抽象类实现接口:
JAVA中允许一个抽象类实现多个接口
接口不允许继承抽象类
一个接口继承多个接口
7、对象多态性
JAVA中面向对象的体现:
(1)、方法的重载与覆写
(2)、对象的多态性
对象的多态性:
(1)、向上转型:
子类对象->父类对象格式:
父类父类对象=子类实例
(2)、向下转型:
父类对象->子类对象格式:
子类子类对象=(子类)父类实例
向上转型:
程序会自动完成
向下转型:
需要明确指明要转型的子类类型
向上转型:
父类对象调用的是被子类覆写过的方法,但是无法调用子类特有方法
向下转型示例:
如果想调用子类自己的方法,则只能用子类声明对象
在子类中调用了父类中的fun2()方法,fun2()要调用fun1()方法,但是fun1()已经被子类重写,所以调用的是被重写过的方法
对象向下转型的要求:
向下转型前必须先进行向上转型
多态性实现:
在fun()方法中运用了对象多态性,可以接受任意子类对象,这样无论子类做何改变,函数都不用变,原因:
发生对象向上转型后,调用的方法是被子类覆盖过的方法
8、instanceof关键字
作用:
判断对象是否是某一个类的实例,返回boolean值
9、抽象类的实际运用:
10、接口的实际运用——制定标准
接口是JAVA解决多继承局限的一种手段
思想:
先定义一个USB接口类,有开始工作、停止工作功能,然后定义一个设备工作过程的类,参数为USB派生的类,设备工作时,USB开始工作,然后设备停止工作。
有USB接口继承的两个类Flash、Printer,他们的工作过程都通过Computer类的函数实现
11、设计模式——工厂设计
工厂设计是JAVA开发中使用得最多的一种设计模式
非工厂设计示例:
问题:
如果需要更换子类,则必须修改主方法
解决方法:
在接口与具体子类之间加入一个过渡端,通过过渡端取得接口实例,这个过渡端即工厂类
改进后示例代码:
有一个工厂类Factory,通过判断参数属于哪个类别实例化具体的子类,然后返回子类对象,再在主方法里面引用子类对象方法
要点:
比较字符串内容时为什么把字符常量写在前面?
——避免空指向一异常,即对象为null时调用方法时出现空指向异常
12、设计模式——代理设计
代理设计也是在JAVA开发中使用的较多的一种设计模式
代理设计:
由一个代理主题来操作真实主题,真实主题执行具体的业务操作,而代理主题负责其它相关业务的处理
不大懂,慢慢琢磨着
13、设计模式——适配器设计
问题:
如果一个类要实现一个接口,就必须重写接口中的全部抽象方法,但是如果又没有必要全部重写,这就需要一个中间的过渡类,过渡抽象类,一个接口首先被一个抽象类(适配器类)实现,并在此抽象类中实现若干方法(方法体为空),则以后的子类直接继承此抽象类,就可以有选择重写所需要的方法
示例代码:
先定义一个包含所有方法的接口类,然后定义一个继承这个接口的抽象类,方法体全部为空,然后再定义一个具体的操作类,实现某些需要的方法
14、内部类的扩展
在抽象类中也可以定义多个接口或抽象类,在一个接口中也可以定义多个抽象类或接口
15、抽象类与接口之间的关系
序号
区别点
抽象类
接口
1
定义
包含一个抽象方法的类
抽象方法和全局常量的集合
2
组成
构造方法、抽象方法、
普通方法、常量、变量
常量、抽象方法
3
使用
子类继承抽象类extends
子类继承接口implements
4
关系
抽象类可以实现多个接口
接口不能继承抽象类,但允许
继承多个接口
5
常见设计模式
模板设计
工厂设计、代理设计
6
对象
都通过对象的多态性产生实例化对象
7
局限
抽象类有单继承局限
接口没有此局限
8
实际
作为一个模板
作为接口或表示一种能力
9
选择
如果抽象类和接口都可以使用,则优先使用接口,避免单继承局限
10
特殊
一个抽象类中可以包含多个接口,一个接口可以包含多个抽象类
原则:
一个类不要去继承一个已经实现好的类,只能继承抽象类或实现接口,如果接口和抽象类都可以使用,那么优先使用接口,避免单继承局限
16、Object类
JAVA中所有类都有一个公共的父类Object,一个类只要不是明显的继承一个类,则肯定是Object类的子类
Object类中的主要方法:
序号
方法名称
类型
描述
1
publicObject()
构造
构造方法
2
publicbooleanequals(Objectobj)
普通
对象比较
3
publicinthashCode()
普通
取得Hash码
4
publicStringtoString()
普通
对象打印时调用
用处:
对于一个设计良好的类来说,最好重写Object类中的equals、hashCode、toString3个方法。
equals()方法的功能就是对象的比较,实际上String也是Object类的子类,所以在String中已经实现了此方法,如果现在一个类需要实现对象比较操作,则直接在类中重写此方法即可
Object类提供的equals()方法默认是比较地址而非内容
Object类在实际开发中的作用:
因为Object类可以接收任意的引用数据类型,所以在很多的类库设计上都采用Object作为方法的参数,这样操作起来会比较方便
17、包装类
JAVA设计中的思想:
一切皆为对象
矛盾:
数据类型分为基本数据类型和引用数据类型,但是基本数据类型不能够称为对象
此时就需要将基本数据类型进行包装,将8种数据类型变为一个类的形式,也就是包装类的作用
包装类与基本数据类型的关系:
序号
基本数据类型
包装类
1
int
Integer
2
char
Character
3
short
Short
4
long
Long
5
float
Float
6
double
Double
7
boolean
Boolean
8
byte
Byte
包装类中的继承关系:
(JDK文档中有)
(1)、Integer、Byte、Float、Double、Short、Long都属于Number类的子类,Number类本身提供了一系列的返回以上6种数据类型的操作
(2)、Character、Boolean属于Object类的直接子类
Number类是一个抽象类,主要是将数字包装类中的内容变为基本数据类型
Number类中定义的方法:
序号
方法
类型
描述
1
publicbytebyteValue()
普通
以byte形式返回指定的数值
2
publicabstractdoubledoubleValue()
普通
以double形式返回指定的数值
3
publicabstractfloatfloatValue()
普通
以float形式返回指定的数值
4
publicabstractintintValue()
普通
以int形式返回指定的数值
5
publicabstractlonglongValue()
普通
以long形式返回指定的数值
6
publicshortshortValue()
普通
以short形式返回指定的数值
装箱与拆箱:
装箱操作:
讲一个基本数据类型变为包装类
拆箱操作反过来将包装类变为基本数据类型
装箱及拆箱操作:
自动装箱及拆箱操作:
包装类的应用:
应用最多的是字符串变为基本数据类型的操作,在Integer和Float类中分别提供了一下两种方法:
(1)、Integer类(字符串转int型)
publicstaticintparseInt(Strings)throwsNumberFormatException
(2)、Float类(字符串转float型)
publicstaticfloatparseFloat(Strings)throwsNumberFormatException
18、匿名内部类
指没有一个具体名称的类,是在接口和抽象类应用上发展起来的
非匿名内部类示例:
问题:
如果接口的实现类只是用一次,就没有必要单独应以一个子类B了
修改后:
newA()实现接口,但是接口不能直接实现,所以后面应该有{}解释实现方法,即printInfo()函数重写
19、要点:
∙JAVA在执行子类的构造方法前会先调用父类中无参数构造方法,目的是为了对继承自父类的成员做初始化操作
∙在父类中用final修饰的方法不能被子类覆写
∙全局常量:
publicstaticfinal
∙抽象类的方法可分为两种,一种是一般的方法,另一种是抽象方法
∙接口同一般类也可以通过扩展派生出新接口。
原接口称为基本接口或父接口,扩展为派生接口或子接口。
通过这种机制,派生接口可以保留父接口成员,也可根据需要加入新成员
∙JAVA对象的多态性:
向上转型(自动)和向下转型(强制)
∙匿名内部类作用:
利用内部类创建无名称对象,并利用它方法类中其他成员
理解还不是让人满意,隔天吧,补上,加深理解,慢慢理解……
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象