java的类
第三章 类和对象
本章目标:
1.了解面向对象的概念和特性
2.理解抽象和封装
3.掌握类和对象的创建
4.掌握类、成语变量和成员方法的使用
5。掌握包的声明和导入
一、面向对象和面向过程的区别
面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象:把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
如:五子棋
面向过程的设计思路就是首先分析步骤:1 开始游戏 2 黑子先走 3 绘制画面 4 判断输赢等
面向对象则是把五子棋分为各个对象:1 黑白双方 2 棋盘系统 绘制画面 3 规则系统 判定输赢和犯规等
盖房子:
面向对象思想:
1、 找建筑师,画图纸
2、 找建材厂,买建材
3、 找工程队,根据图纸造房子
4、 直到完工
面向过程思想:
1、 缺水泥,买水泥
2、 缺钢筋,买钢筋
3、 材料准备齐全,先建第一层楼(研究分几个房间,楼梯建哪里,厕所建哪里)
4、 建好后,建第二层楼
5、 直到完工
总结:面向对象和面向过程的区别
① 面向对象:是从宏观方向思考问题,先抽象,后具体
① 面向过程:是从细节思考问题,先细节,再整体
面向对象,往往也包含了面向过程的思想
面向对象较面向过程的优点和缺点
优点:
结构清晰
封装性
容易拓展,代码重用率高
缺点:
增加工作量
性能低:计算时间和空间存储大小开销大
面向对象的三大特点:封装、 继承、 多态
二、什么是类
类是具有相同属性和行为的一组对象的集合
比如说:人类,动物类等
三、什么是对象
具有明确行为的具体实体,具体行为和状态
类的实例,如某个人,某个动物
四、创建类
public class Person{
string name;
int age;
}
五、创建对象
先声明: 类名 对象名=null;
实例化:对象名=new 类名();
属性方法使用:对象名.属性 对象名.方法
Person p = new Person();
p.name="张三";
p.age=18;
六、对象的产生过程:栈存储对象名 堆存储值
Person p1=p2;
p1.setName();//p2也会改变
p1/p2只想同一个堆里的值
只声明对象出现的异常
修饰符
private 私有的 被private修饰的属性和方法 只能在当前类中使用
public 公共的 被public修饰的属性和方法 能在当前项目中所有类调用
七、封装
对用户隐藏实现细节,对对象信息进行封装
封装主要使用private,将属性私有化,生成对应的set和get方法
封装使数据和操作数据的方法成为一个整体,以实现独立性很强的功能模块
八、构造方法
1、 构造方法的特点
访问修饰符 类名(){
}
2、 构造方法的调用
只有在实例化对象的时候
3、 构造方法的分类
a) 有参数的构造方法(参数一般是给属性赋值)
b) 无参数的构造方法
注意:有参数的构造方法存在之后,默认的无参数构造方法就不可用,需要用,就显示写出来
九、方法重载
1、 什么是方法重载
方法名相同,参数的个数,类型或者顺序不一致
2、 什么时候需要方法重载
计算2个数的和(int)
要做的同一件事情,但是可能需要的参数不一致,就可以用方法重载
十、继承
1、 生活中的继承
继承家产:在原来的财富上,增加更多的财富
2、 程序中的继承
把几种类的相同属性和行为,抽取出来,放在另外一个类里面,接着,这几种类就继承此类
人类:姓名,性别,年龄
学生类:所在班级,人类
教师类:教的班级,人类
员工类:人类
3、 类继承类的语法:extends
修饰符 class 类名 extends 父类类名{
//自己的属性
//自己的方法
}
4、 继承的注意事项
1) 子类继承父类,就拥有了父类的所有属性和行为
2) 不能继承私有的private修饰的属性和方法,构造方法也不能继承
3)单继承(子类只能有一个父类)
5、 父类与子类的称呼
父类:基类、超类
子类:派生类、衍生类
十一、方法重写
1、 什么是方法重写
子类重写父类的方法,返回值类型,方法名及参数一模一样
2、 方法重写与方法重载的区别
1) 方法重写:一定是父类继承
2) 概念不一样
十二、子类产生的过程
1、生活中子类产生:
有孩子必须要有父母
2、java中子类产生:
子类有产生之前,也会先存在一个父类
3、 程序中子类产生的过程
① 先构造一个父类对象
② 再构造一个子类对象
重点:子类对象创建之前,一定会先默认的创建好所有的父类对象
4、父类对象怎么产生?
① 在子类的构造方法中,第一行,隐藏着一行代码:
super(); //调用父类无参构造方法
② 在子类的构造方法中,可以自己手动的(自己写)调用父类的有参构造方法
super(实际参数......); //隐藏的调用无参构造方法就不存在了
十三、super关键字
1、 什么是super?
可认为是父类对象
2、 在什么地方使用super?
在子类中使用
3、 怎么使用super?
a) 在子类的构造方法中使用
i. 在每个子类的每个构造方法的第一行代码中,:
1. super(); //存在一个隐藏的代码,调用父类的无参构造方法
2. super (实际参数......); //隐藏的super()就不存在了
b) 在子类的任何方法中使用
i. super.属性; //使用父类的属性
ii. super.方法(); //使用父类的方法
十四、this关键字
1、 什么是this?
可认为是当前类对象
2、 在什么地方使用this?
在任何类中使用
3、 怎么使用this?
a) 在构造方法中使用
i. 可写在类的构造方法的第一行
1. this(); //调用无参数的构造方法
2. this(参数,......); //调用有参数的构造方法
注意:此时,这个构造方法的隐藏调用父类的无参数构造方法,就不存在了
b) 在子类的任何方法中使用
i. this.属性; //使用当前类的属性
ii. this.方法(); //使用当前类的方法
十五、父子对象之间的特殊引用
1、 父类对象可以当做子类对象使用
父类类名 对象名 = new 子类类名();
注意此时对象有使用限制:
① 只能使用父类的属性和方法
② 对于被子类重写的方法,则会使用重写后的方法
2、 转换成真正的子类?直接使用强制类型转换
子类类名 对象名2 = (子类类名)对象名;
3、 instanceof关键字:用来匹配类型
用法:
//是否可以匹配此类型
if(对象名 instanceof 类名){
//则可以强制转换成此类型使用
子类类名 对象名2 = (子类类名)对象名;
}
体现:面向对象中的多态
浙公网安备 33010602011771号