面向对象.docx
- 文档编号:2913068
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:175
- 大小:707.67KB
面向对象.docx
《面向对象.docx》由会员分享,可在线阅读,更多相关《面向对象.docx(175页珍藏版)》请在冰豆网上搜索。
面向对象
纲要
面向过程与面向对象的区别
面向对象的三大特性
类与对象的概念
类的定义
对象的创建和使用
Java中的封装特性
构造函数
对象内存分析及引用传递
this关键字
static关键字
单例模式初步
类的继承
方法的覆盖
super关键字
final关键字
抽象类
接口
多态
抽象类与接口的区别
Object类
package和import
访问权限控制
内容
1.1、面向过程与面向对象的区别(盖饭、蛋炒饭)
为什么会出现面向对象分析方法?
因为现实世界太复杂多变,面向过程的分析方法无法满足
面向过程?
采用面向过程必须了解整个过程,每个步骤都有因果关系,每个因果关系都构成了一个步骤,多个步骤就构成了一个系统,因为存在因果关系每个步骤很难分离,非常紧密,当任何一步骤出现问题,将会影响到所有的系统。
如:
采用面向过程生产电脑,那么他不会分CPU、主板和硬盘,它会按照电脑的工作流程一次成型。
面向对象?
面向对象对会将现实世界分割成不同的单元(对象),实现各个对象,如果完成某个功能,只需要将各个对象协作起来就可以。
1.2、面向对象的三大特性
●封装
●继承
●多态
1.3、类与对象的概念
类是对具有共性事物的抽象描述,是在概念上的一个定义,那么如何发现类呢?
通常根据名词(概念)来发现类,如在成绩管理系统中:
学生、班级、课程、成绩
学生—张三
班级—602
课程—J2SE
成绩—张三成绩
以上“张三”、“602”、“J2SE”和“张三的成绩”他们是具体存在的,称为对象,也叫实例
也就是说一个类的具体化,就是对象或实例
为什么面向对象成为主流技术,主要就是因为更符合人的思维模式,更容易的分析现实世界,所以在程序设计中也采用了面向对象的技术,从软件的开发的生命周期来看,基于面向对象可以分为三个阶段:
●OOA(面向对象的分析)
●OOD(面向对象的设计)
●OOP(面向对象的编程)-----Java就是一个纯面向对象的语言
我们再进一步的展开,首先看看学生:
学生:
学号、姓名、性别、地址,班级
班级:
班级代码、班级名称
课程:
课程代码、课程名称
成绩:
学生、课程、成绩
大家看到以上我们分析出来的都是类的属性
接下来采用简易的图形来描述一下,来描述我们的概念(来源成绩管理系统的概念,来源于领域的概念,这个领域就是成绩系统管理领域)
以上描述的是类的属性,也就是状态信息,接下来,再做进一步的细化
通过以上分析,大家应该了解:
类=属性+方法
属性来源于类的状态,而方法来源于动作
以上模型完全可以使用面向对象的语言,如Java来实现
1.4、类的定义
在Java中如何定义类?
具体格式:
类的修饰符class类名extends父对象名称implements接口名称{
类体:
属性和方法组成
}
【示例代码】
publicclassStudent{
//学号
intid;
//姓名
Stringname;
//性别
booleansex;
//地址
Stringaddress;
//年龄
intage;
}
以上属性称为成员变量,局部变量是在方法中定义的变量,方法的参数,方法的返回值,局部变量使用前必须初始化,而成员变量会默认初始化,初始化的值名为该类型的默认值
1.5、对象的创建和使用
(必须)使用new创建出来,才能用。
【示例代码】
publicclassOOTest01{
publicstaticvoidmain(String[]args){
//创建一个对象
Studentzhangsan=newStudent();
System.out.println("id="+zhangsan.id);
System.out.println("name="+zhangsan.name);
System.out.println("sex="+zhangsan.sex);
System.out.println("address="+zhangsan.address);
System.out.println("age="+zhangsan.age);
}
}
classStudent{
//学号
intid;
//姓名
Stringname;
//性别
booleansex;
//地址
Stringaddress;
//年龄
intage;
}
具体默认值如下:
类型
默认值
byte
0
short
0
int
0
long
0L
char
‘\u0000’
float
0.0f
double
0.0d
boolean
false
引用类型
null
对成员变量进行赋值
publicclassOOTest02{
publicstaticvoidmain(String[]args){
//创建一个对象
Studentzhangsan=newStudent();
zhangsan.id=1001;
zhangsan.name="张三";
zhangsan.sex=true;
zhangsan.address="北京";
zhangsan.age=20;
System.out.println("id="+zhangsan.id);
System.out.println("name="+zhangsan.name);
System.out.println("sex="+zhangsan.sex);
System.out.println("address="+zhangsan.address);
System.out.println("age="+zhangsan.age);
}
}
classStudent{
//学号
intid;
//姓名
Stringname;
//性别
booleansex;
//地址
Stringaddress;
//年龄
intage;
}
一个类可以创建N个对象,成员变量只属于当前的对象(只属于对象,不属于类),只有通过对象才可以访问成员变量,通过类不能直接访问成员变量
以上程序存在缺点,年龄可以赋值为负数,怎么控制不能赋值为负数?
1.6、面向对象的封装性
控制对年龄的修改,年龄只能为大于等于0并且小于等于120的值
publicclassOOTest03{
publicstaticvoidmain(String[]args){
//创建一个对象
Studentzhangsan=newStudent();
/*
zhangsan.id=1001;
zhangsan.name="张三";
zhangsan.sex=true;
zhangsan.address="北京";
zhangsan.age=20;
*/
zhangsan.setId(1001);
zhangsan.setName("张三");
zhangsan.setSex(true);
zhangsan.setAddress("北京");
zhangsan.setAge(-20);
System.out.println("id="+zhangsan.id);
System.out.println("name="+zhangsan.name);
System.out.println("sex="+zhangsan.sex);
System.out.println("address="+zhangsan.address);
System.out.println("age="+zhangsan.age);
}
}
classStudent{
//学号
intid;
//姓名
Stringname;
//性别
booleansex;
//地址
Stringaddress;
//年龄
intage;
//设置学号
publicvoidsetId(intstudentId){
id=studentId;
}
//读取学号
publicintgetId(){
returnid;
}
publicvoidsetName(StringstudentName){
name=studentName;
}
publicStringgetName(){
returnname;
}
publicvoidsetSex(booleanstudentSex){
sex=studentSex;
}
publicbooleangetSex(){
returnsex;
}
publicvoidsetAddress(StringstudentAddress){
address=studentAddress;
}
publicStringgetAddress(){
returnaddress;
}
publicvoidsetAge(intstudentAge){
if(studentAge>=0&&studentAge<=120){
age=studentAge;
}
}
publicintgetAge(){
returnage;
}
}
从上面的示例,采用方法可以控制赋值的过程,加入了对年龄的检查,避免了直接操纵student属性,这就是封装,封装其实就是封装属性,让外界知道这个类的状态越少越好。
以上仍然不完善,采用属性仍然可以赋值,如果屏蔽掉属性的赋值,只采用方法赋值,如下:
publicclassOOTest04{
publicstaticvoidmain(String[]args){
//创建一个对象
Studentzhangsan=newStudent();
zhangsan.id=1001;
zhangsan.name="张三";
zhangsan.sex=true;
zhangsan.address="北京";
zhangsan.age=20;
/*
zhangsan.setId(1001);
zhangsan.setName("张三");
zhangsan.setSex(true);
zhangsan.setAddress("北京");
zhangsan.setAge(20);
*/
/*
System.out.println("id="+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象