没有合适的资源?快使用搜索试试~ 我知道了~
Java面向对象编程思想.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 9 浏览量
2022-06-11
03:13:03
上传
评论
收藏 165KB DOC 举报
温馨提示
试读
12页
Java面向对象编程思想
资源推荐
资源详情
资源评论
一:Java 面向对象的编程思想:
具有面向对象的三大特征:
封装:通过 的类来实现数据和操作方法的封装,对外界可以将每一个 类都视
为一个黑箱,只需要调用该黑箱提供的方法即可完成你想要的操作。
继承:通过类的继承,便于将统一的功能集中在父类中,实现代码的重用和可维护性
多态:通过重载、重写与覆盖,实现不同类的不同形态特征。
以上这三大特征是通过具体的类、抽象类与接口技术来体现的。
把封装的类进行实例化,可以生成多个对象,这些对象通过消息传递来进行交互消息
传递即激活指定的某个对象的方法,以改变其状态或让它产生一定的行为,最终完成
复杂的任务。
一个类的使用过程,包括封装类,生成实例、使用实例进行三个操作 个过程。
一个类就是变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有
的行为。
封装的类不是对象,要使用该封装的类进行操作,必须先生成这个类的一个实例
对象。对象的生成包括声明、实例化和初始化 个方面的内容。通常的格式为:
!
声明了一个类型为 的对象。其中 是组合类型包括类
和接口。对象的声明并不为对象分配内存空间。
运算符 为对象分配内存空间,实例化一个对象。调用对象的构造方法,
返回对该对象的一个引用即该对象所在的内存地址。用 可以为一个类实例化多个
不同的对象。这些对象占用不同的内存空间,因此改变其中一个对象的状态不会影响
到其他对象的状态。
生成对象的最后一步是执行构造方法,进行初始化。由于对构造方法可以进行重
写,所以通过对给出不同个数或者类型的参数会分别调用不同的构造方法
运算符返回对一个对象的应用,但与,,""中的指针不同,对象的引用是
指向一个中间的数据结构,它存储有关数据类型的信息及当前对象所在堆的地址 ,而
对于对象所在实际的内存地址是不可操作的,这就保证了安全性。
# 对于具有共同属性,又有自己特点的对象,就不能够通过单一的封装来实现了。此时
可以通过继承来实现。通过父类和子类,实现了类的层次,可以从最一般的开始,逐
步特殊化,定义一系列子类。同时,通过继承也实现了代码的复用,是程序的复杂性
线性增长,而不是呈几何增长。
$ 继承是面向对象的基石,因为他允许创建分等级层次的类。运用继承,你能够创建一
个通用类,它定义了一系列相关项目的一般特性。该类可以被具体的类继承,每个具
体 的 类 都 增 加 一 些 自 己 的 特 有 的 东 西 。 在 术 语 中 , 被 继 承 的 类 叫 做 超 类
%,继承超类的类叫做子类%。因此,子类是超类的一个专用版本,
它继承了超类定义的所有实例变量和方法,并且为它自己增添了独特元素。
继承是使用已经存在的类的定义作为基础建立新类的技术,新类的定义可以增加
新的数据或新的功能,也可以用父类的功能,但不能选择性的继承父类。
& 尽管子类包括超类所有的成员,但它不能访问超类中被声明为 的成员。只能被
它自己类中的其他成员访问,子类没有方法访问。
' 父类和子类的相互转换:在 中可以将子类的引用赋给父类的对象,那么这时子类
中那些不是从父类继承来的成员将不再可见,我们可以再通过强制类型转换将这个父
类再转换成子类类型,那些成员又变得可见了,由此可见,将子类引用赋给父类对象
时, 虚拟机并没有将那些非继承成员丢弃。例如:
(%%(%!
%!
)*%!在编译时将产生错误,在 中 是不可见的。
下面将得到正确的结果,子类非继承域又可访问,没有被丢弃。
(%%(%!
)*%%+!
, 使用 - 和 %
拥有两个保留关键字 - 和 %.这两个关键字在继承的子类中使用。
-:
引用当前类的变量和方法。可以防止父类中也有相同的变量或者方法造成错乱。
%/
它引用当前对象的直接父类中的成员用来访问直接父类中被隐藏的父类中成员数据或
者函数,基类与派生类中有相同成员定义时
另外还有两种用法:
-参数引用当前类的构造函数。格式如下:
-实参
类似的 %(参数)调用基类中的某一个构造函数
在子类的构造函数中,如果我们不显示的调用 %()完成父类的构造,系统会自动
调用父类的构造函数,但是这样存在很多的问题。如果在父类的构造函数中我们自己
定义了构造函数,那么系统提供给我们不带参数且函数体只是一对大括号的构造函数
将被收回,这时在子类的构造函数中,如果我们不显式指定哪一个 %.就会默认
那个不带参数的父类构造函数,而如果我们自己定义的父类构造函数又全是不需要参
数的话,就会产生编译错误
在实现了类的继承后,子类就拥有了父类可见的变量和方法,就可以引用这些变量和
方法了。但是,,同时子类也可以有同父类同名的变量和方法,在同一个类的内部,
也可以拥有同名的、参数列表不同的方法,这就是多态,即同一个名字有多种实现状
态。
多态是通过方法重写和方法的重载来实现的。
覆盖:继承了父类的同名无参函数
当子类从父类继承一个无参方法,而又定义了一个同样的无参方法,则子类新写的方
法覆盖父类的方法,称为覆盖注意返回值类型也必须相同,否则编译出错。
重载:继承了父类的同名有参函数
当子类继承了父类的一个同名函数,且方法不同,则称为重载。通过方法重载,子类
可以重新实现父类的方法,使其具有自己的特征。
重写:当前类的同名方法
通过方法重写,一个类中可以有多个具有相同名字的方法,由传递他们的不同参数个
数和类型的参数来决定使用哪种方法。因此,重写的名称是 当前类中的同名函数,不
是父类中的函数名。
由以上可以知道,只有覆盖和重载是针对父类的,而重写是针对当前类的。
注意:对于方法的访问限制修饰词,子类方法要比父类的访问权限更高,例如父类为
%.那么子类为 则出现错误。子类抛出的异常应该是父类抛出异常或其子类。
在面向对象的概念中,所有的对象都是通过类来描述的,但是反过来却不是这样的,
不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具
体的对象,这样的类就是抽象类。抽象类往往用来表示我们在对问题领域进行分析、
设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
抽象类可以有自己的数据成员,也可以有非 得成员方法,也可以由抽象方法,
抽象方法只有函数定义部分,没有函数体,函数的具体实现要在子类中编写。
抽象类的继承:抽象类是一种特殊的类,必须通过继承才能够使用,继承的方法与普
通的类没有什么区别使用 01 关键字,不同的是,它必须实现所有的 方法。
# 不能被继承的类最终类2
在设计类时,如果这个类不需要子类,类的实现细节不允许改变,并确信这个类不会
被再扩展,那么就设计为 2 类。3 类不被继承,因此 2类的成员方法没有机会
被覆盖,默认都是 2的。
2 类不能被继承,没有子类,2 类中的方法默认是 2 的。
2 方法不能被子类的方法覆盖,但可以被继承。
2成员变量表示常量,只能被赋值一次,赋值后值不能再改变
2不能修饰构造方法
另外注意:父类的 成员方法是不能被子类方法覆盖的,因此 类型的
方法默认是 2 类型的
# 使用 2 方法的原因有两个:
把方法锁定,防止任何继承类修改它的意义和实现。
高效,编译器在遇到调用 2 方法时会转入内嵌机制,大大提高执行效率
对于 24 类型的成员变量,4使得变量只存在一个副本,2 使得它不能
改变
$2 成员只能被初始化一次。
3 成员必须在声明时或者在构造方法中被初始化,而不能在其他的地方被初始化。
$ 多重继承: 中通过接口可以实现多重继承。使多个不相关的类可以具有相同的方
法。
& 中的接口是一系列方法的声明,是一些方法特征的集合,接口只有方法的特征没
有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具
有不同的行为。
' 在 语言规范中,一个方法的特征仅包括方法的名字、参数的数目和类型,而不包
括方法的返回类型、参数的名字及抛出来的异常。在 编译器检查方法的重载时,
会根据这些条件判断两个方法是否是重载方法。但在 编译器检查方法的置换时,
则会进一步检查两个方法分超类型和子类型的返回值类型和抛出的异常是否相同。
, 接口继承和实现继承的规则不同,一个类只能有一个直接父类,但可以实现多个接口。
接口的存在可以使 中的对象向上转型为多个基类型,并且和抽象类一样可以防止
他人创建该类的对象,因为接口不允许创建对象。
56关键字用来声明一个接口,它可以产生一个完全抽象的类,并且不提供任何具
体实现。接口的特性整理如下:
接口中的方法可以有参数列表和返回值类型,但不能有任何方法体
接口中可以包含字段,但是会被隐式的声明为 4 和 2
接口中的字段只是被存储在该接口的静态存储区内,而不属于该接口
接口中的方法可以被声明为 % 或不声明,但结果都会按照 % 类型处理
实现一个接口时,需要将被定义的方法声明为 % 类型,否则为默认访问类型,
编译器不允许这种情况
剩余11页未读,继续阅读
资源评论
oligaga
- 粉丝: 50
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功