一、面向对象思想的简单概述
面向对象是Java基础学习过程中重点的的一部分。从大体上来说,面向对象思想就是基于面向过程的思想,是软件开发过程中使用的一种思维方式。举两个有趣的小实例来简单解释说明一下。
举例:
A:比如洗袜子过程,如果要完成这一整件事情,那么我们的过程是:
面向过程:脱了-->泡一泡-->扭一扭-->搓一搓-->漂洗-->晾干
我们如果要偷懒,想简化过程,此时我们可以---------------》
找女朋友洗袜子:
面向对象:说两句好话
B:比如想吃煎饼果子,如果要完成这一整件事情,那么我们的过程是:
面向过程:上网搜一下,哪家强?-->买家伙什儿-->买材料-->摊煎饼-->找个人 试吃-->你就可以吃了
而现实生活中,我们实际上的做法是---------------》
找摊煎饼大妈:
面向对象:嗯-->掏钱-->吃。。。。。
面向过程:强调功能行为,关注完成的过程
面向对象:将功能封装进对象,强调具备了功能的对象,不关注过程
总结一下面向对象思想的特点:
1,是一种更符合我们思想习惯的思想--懒人的思想
2,可以将复杂的事情简单化
3,角色发生了转换,执行者-->指挥者
面向对象完成需求:
a ,明确开发功能需求。
b ,查找具有该功能的类。
c ,如果不存在满足功能的类,则定义这样的类。
d ,创建该类对象,使用对象完成功能。
二、类与对象
我们学习编程语言,就是为了模拟现实世界的事物,实现信息化,实际生活中,我们是如何描述现实世界事物的呢?
比如描述一美女:
属性: 脸 ,眼镜 ,腿 ,腰 -->天生的
功能: 爱旅游,爱音乐, 琴棋书画 -->后天的
再比如描述一手机:
手机:
属性:像素,大小,价格,形状,内存,品牌,型号 iPhone6s
功能:玩游戏,拍照,打电话,发信息,看电影,上网,
Java中最基本描述事物的单位是类( 分类 ),Java中用class描述事物也是如此:
class 分类,分门别类, 物以类聚
定义类就是描述一类事物
成员变量 就是事物的属性
成员方法 就是事物的行为
定义类其实就是定义类的成员(成员变量和成员方法)。
如何java定义一个学生类呢?
- package cn.itcast;
- /*
- 定义学生类
- 分析:
- 学生 :
- 属性: 姓名,年龄,性别,学号 (名词)
- 功能: 学习,吃饭,睡觉,做作业(动词)
- 实现:
- */
- class Student {
- // 成员变量
- // 姓名
- String name;
- // 年龄
- int age;
- // 性别
- String sex;
- // 学号
- String studyNum;
- // 成员方法 注意:别加 static
- // 学习
- public void study() {
- System.out.println("学习");
- }
- // 吃饭
- public void eat() {
- System.out.println("吃饭");
- }
- // 睡觉
- public void sleep() {
- System.out.println("睡觉");
- }
- // 做作业
- public void doHomework() {
- System.out.println("做作业");
- }
- }
- /*
- * 一个文件里面写两个类,文件名字必须和测试类名字一致 使用成员 :
- *
- * 成员变量: 对象名.成员变量名
- *
- * 成员方法: 对象名.成员方法名(方法的调用)
- */
类和对象的关系:
1,类是抽象概念,对象是类的具体实例。
2,一个类可以有多个对象。一个对象只属于一个类
对象创建格式:
数据类型 变量名(对象名) = new 数据类型(参数);
对象的使用:
1,成员变量的访问:对象名.属性名
2,成员函数的调用:对象名.函数名(参数)
我们做一个手机类,和一个内存图来帮助理解
- class PhoneTest {
- public static void main(String[] args) {
- // 创建对象
- Phone p = new Phone();
- // 使用成员
- p.brand = "苹果";
- // 型号
- p.type = "5s";
- // 价格
- p.price = 2999;
- // 颜色
- p.color = "土豪金";
- System.out.println("---------------------");
- // 方法
- p.call();
- p.sendMsg("妈妈喊你回家吃饭,妈妈喊你回家吃饭,妈妈喊你回家吃饭");
- p.playApp();
- }
- }
- // 定义手机类 --描述手机
- class Phone {
- // 成员变量
- // 牌子
- String brand;
- // 型号
- String type;
- // 价格
- int price;
- // 颜色
- String color;
- // num
- int num = 20; // 成员变量
- // 成员方法
- // 打电话
- public void call() {
- int num = 10; // 局部变量
- System.out.println("打电话" + num);
- }
- // 发信息
- public void sendMsg(String text) {
- System.out.println("发信息:" + text);
- }
- // 玩app
- public void playApp() {
- System.out.println("玩微信,玩陌陌,玩比邻");
- }
- }
一个对象内存图:
两个对象内存图:
三个对象内存图:
内存位置:
对象由new关键字创建,实体存在于堆栈内存中
任何数据均可以定义成类,创建对象,属于引用类型。
三、成员变量和局部变量的区别
1,在类中的位置不同
成员变量 类中方法外
局部变量 方法内或者方法声明上
2,在内存中的位置不同
成员变量 堆内存
局部变量 栈内存
3,生命周期不同
成员变量 随着对象的存在而存在,随着对象的消失而消失
局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
4,初始化值不同
成员变量 有默认的初始化值
局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
四、匿名对象
定义:匿名对象是对象的简化形式,即没有名字直接创建的对象。
匿名对象的使用:
对象方法只调用一次时。
作为实际参数传递时。
作为返回值返回时。
五、面向对象特征
封装(encapsulation)
继承(inheritance)
多态(polymorphism)