之前的代码描述都是基于面向过程的,今天开始正式进入面向对象的世界。什么是对象?首先要区分类和对象的概念——

现实世界中是如何描述一个事物的?

举例:学生

姓名,年龄,性别...

学习,吃饭,睡觉



属性:该事物的描述信息

行为:该事物能够做什么



学习编程语言,是为了模拟现实世界的事物的。

而学习的编程语言Java中最基本的单位是:类。

所以,我们就应该把事物通过类来体现出来:

由此,我们就得到了现实世界事物和类的对应关系:





事物: 类:


属性 成员变量

行为 成员方法





类:是一组相关的属性和行为的集合。是一个抽象的概念。

对象:是该类事物的具体表现形式。具体存在的个体。





举例:

学生:类

班长:对象

1:面向对象思想

面向对象是基于面向过程的编程思想。



面向过程:强调的是每一个功能的步骤

面向对象:强调的是对象,然后由对象去调用功能



2:面向对象的思想特点

A:是一种更符合我们思想习惯的思想

B:可以将复杂的事情简单化

C:将我们从执行者变成了指挥者



举例:

买电脑:

面向过程:我的了解电脑--了解我自己的需求--找对应的参数信息--去中关村买电脑--讨价还价--买回电脑

面向对象:我知道我要买电脑 -- 班长去给我买 -- 班长就买回来了

洗衣服:

面向过程:把衣服脱下--找一个盆--放点洗衣粉--加点水--把衣服扔进去--搓一搓--清洗衣服--拧干--晾起来

面向对象:把衣服脱下--打开全自动洗衣机--扔进去--一键即可--晾起来

吃饭:

面向过程:去超市买菜--摘菜--洗菜--切菜--炒菜--盛起来--吃

面向对象:上饭店吃饭,你--服务员(点菜)--厨师(做菜)--服务员(端菜)--吃





3:把大象装进冰箱

面向过程:

动作有哪些呢?

A:打开冰箱门

B:装进大象

C:关闭冰箱门



代码体现;

class Demo {

public static void main(String[] args) {



//写了方法以后,调用就改变了

open();

in();

close();

}



public static void open() {

System.out.println("打开冰箱门");

}



public static void in() {

System.out.println("装进大象");

}



public static void close() {

System.out.println("关闭冰箱门");

}

}



面向对象:

我们怎么才能更符合面向对象思想呢?****重点中的重点!!!

A:有哪些类呢?

B:每个类有哪些东西呢?

C:类与类直接的关系是什么呢?



把大象装进冰箱的分析? (如何分析有哪些类呢?UML。名词提取法。)

A:有哪些类呢?

大象

冰箱

Demo

B:每个类有哪些东西呢?

大象:

进去

冰箱:

开门

关门

Demo:

main方法

C:类与类直接的关系是什么呢?

Demo中使用大象和冰箱类的功能。



代码体现:

class 大象 {

public static void in() {

System.out.println("装进大象");

}

}



class 冰箱 {

public static void open() {

System.out.println("打开冰箱门");

}



public static void close() {

System.out.println("关闭冰箱门");

}

}



class Demo {

public static void main(String[] args) {

冰箱调用开门

大象调用进去

冰箱调用关门

}

}



4:开发,设计,特征

面向对象开发

就是不断的创建对象,使用对象,指挥对象做事情。



面向对象设计

其实就是在管理和维护对象之间的关系。





面向对象特征

封装(encapsulation)

继承(inheritance)

多态(polymorphism)

  1. /*
  2. 事物:
  3. 属性 事物的信息描述
  4. 行为 事物的功能
  5.  
  6. 类:
  7. 成员变量 事物的属性
  8. 成员方法 事物的行为
  9.  
  10. 定义一个类,其实就是定义该类的成员变量和成员方法。
  11.  
  12. 案例:来完成一个学生类的定义。
  13.  
  14. 学生事物:
  15. 属性:姓名,年龄,地址...
  16. 行为:学习,吃饭,睡觉...
  17.  
  18. 把事物要转换为对应的类:
  19.  
  20. 学生类:
  21. 成员变量:姓名,年龄,地址...
  22. 成员方法:学习,吃饭,睡觉...
  23.  
  24. 成员变量:和以前变量的定义是一样的格式,但是位置不同,在类中方法外。
  25. 成员方法:和以前的方法定义是一样的格式,但是把static先去掉。
  26.  
  27. 首先应该定义一个类,然后完成类的成员。
  28. */
  29. //这是学生类
  30. class Student {
  31. //定义成员变量
  32. //姓名
  33. String name;
  34. //年龄
  35. int age;
  36. //地址
  37. String address;
  38.  
  39. //定义成员方法
  40. //学习的方法
  41. public void study() {
  42. System.out.println("学生爱学习");
  43. }
  44.  
  45. //吃饭的方法
  46. public void eat() {
  47. System.out.println("学习饿了,要吃饭");
  48. }
  49.  
  50. //睡觉的方法
  51. public void sleep() {
  52. System.out.println("学习累了,要睡觉");
  53. }
  54. }
  1.  
  1. <pre name="code" class="java">/*
  2. 在一个java文件中写两个类:一个基本的类,一个测试类。
  3. 注意:文件名称和测试类名称一致。
  4.  
  5. 如何使用呢?
  6. 创建对象使用。
  7.  
  8. 如何创建对象呢?
  9. 格式:类名 对象名 = new 类名();
  10.  
  11. 如何使用成员变量呢?
  12. 对象名.变量名
  13. 如何使用成员方法呢?
  14. 对象名.方法名(...)
  15. */
  16. //这是学生类
  17. class Student {
  18. //定义成员变量
  19. //姓名
  20. String name; //null
  21. //年龄
  22. int age; //0
  23. //地址
  24. String address; //null
  25.  
  26. //定义成员方法
  27. //学习
  28. public void study() {
  29. System.out.println("学生爱学习");
  30. }
  31.  
  32. //吃饭
  33. public void eat() {
  34. System.out.println("学习饿了,要吃饭");
  35. }
  36.  
  37. //睡觉
  38. public void sleep() {
  39. System.out.println("学习累了,要睡觉");
  40. }
  41. }
  42.  
  43. //这是学生测试类
  44. class StudentDemo {
  45. public static void main(String[] args) {
  46. //类名 对象名 = new 类名();创建对象
  47. Student s = new Student();
  48.  
  49. //输出成员变量值 (对象名.变量名)
  50. //System.out.println(s.name);
  51. //System.out.println(s.age);
  52. //System.out.println(s.address);
  53. //改进写法
  54. System.out.println(s.name+"---"+s.age+"---"+s.address);
  55.  
  56. //给成员变量赋值
  57. s.name = "林青霞";
  58. s.age = 27;
  59. s.address = "北京";
  60. //赋值后的输出
  61. System.out.println(s.name+"---"+s.age+"---"+s.address);
  62.  
  63. //调用方法,使用成员方法(对象名.方法名(....);)
  64. s.study();
  65. s.eat();
  66. s.sleep();
  67. }
  68. }
  1. <pre name="code" class="java">/*
  2. 手机类的测试
  3. */
  4. class Phone {
  5. //创建成员变量
  6. //品牌
  7. String brand;
  8. //价格
  9. int price;
  10. //颜色
  11. String color;
  12.  
  13. //创建成员方法
  14. //打电话的方法
  15. public void call(String name) {
  16. System.out.println("给"+name+"打电话");
  17. }
  18.  
  19. //发短信的方法
  20. public void sendMessage() {
  21. System.out.println("群发短信");
  22. }
  23.  
  24. //玩游戏的方法
  25. public void playGame() {
  26. System.out.println("玩游戏");
  27. }
  28. }
  29.  
  30. class PhoneDemo {
  31. public static void main(String[] args) {
  32. //创建手机对象
  33. //类名 对象名 = new 类名();
  34. Phone p = new Phone();
  35.  
  36. //直接输出成员变量值;(对象名.变量名)
  37. System.out.println(p.brand+"---"+p.price+"---"+p.color);
  38.  
  39. //给成员变量赋值
  40. p.brand = "诺基亚";
  41. p.price = 100;
  42. p.color = "灰色";
  43. //再次输出
  44. System.out.println(p.brand+"---"+p.price+"---"+p.color);
  45.  
  46. //调用方法;(对象名.成员方法名称(.....);)
  47. p.call("林青霞");
  48. p.sendMessage();
  49. p.playGame();
  50. }
  51. }

创建多个对象内存图如下所示:

  1.  
  1. <img src="http://img.blog.csdn.net/20160503225405927?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
  1. 两个对象内存图

  1.  
  1. 三个对象内存图:
  1. <img src="http://img.blog.csdn.net/20160503225525417?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

《java入门第一季》之面向对象的更多相关文章

  1. JAVA入门第一季(mooc-笔记)

    笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...

  2. Java入门第一季——从此投身Java??

    找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季  一.简 ...

  3. 《java入门第一季》之面向对象(谈谈接口)

    软件中有接口,这里的接口与硬件中的接口还是有很大区别的. 这里介绍接口不考虑JDK8的新特性(JDK8开始接口里面可以有非抽象方法了,介绍JDK8新特性可能要到整个第一季写完吧!) 还是直接进入接口的 ...

  4. Java入门第一季

    慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Ar ...

  5. 《java入门第一季》之Arrays类前传(排序案例以二分查找注意的问题)

    根据排序算法,可以解决一些小案例.举例如下: /* * 把字符串中的字符进行排序. * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: ...

  6. 《java入门第一季》之面向对象(包概述)

    由于eclipse等ide的强大功能,使得建包,导包用一些快捷键就能完成.这里对包的概念做稍微的叙述,了解即可: 分包后使得项目更加清晰,提高代码维护性. 包:         A:其实就是文件夹   ...

  7. 《java入门第一季》之面向对象(this和super详细分析)

    此文章来自于书籍,里面介绍了this和super详细的区别.当然在后边的文章中还有涉及super的时候还会分析. Java关键字this.super使用总结 一.this Java关键字this只能用 ...

  8. 《java入门第一季》之面向对象(面向对象案例详解)

    通过几个小案例理重新回顾一下前面所写的内容,对面向对象的理解更加深刻的目的: 案例一: /* 需求: 定义一个员工类,自己分析出几个成员, 然后给出成员变量,构造方法,getXxx()/setXxx( ...

  9. 《java入门第一季》之面向对象静态内部类和非静态内部类的区别

    很感谢在内部类章节,"开心阳"先生给与的建议.使用静态内部类.这里就简单说一下静态内部类的使用. package com.devin; public class MyMain{ p ...

随机推荐

  1. Cassandra Secondary Index 介绍

    摘要 本文主要介绍cassandra中的索引,物化视图,有些知识点需要对cassandra有基本的认识才能理解.比如数据在cassandra节点中如何分布.如果有不明白的地方可以看本专栏之前文章.或者 ...

  2. Android自定义View(LineBreakLayout-自动换行的标签容器)

      最近一段时间比较忙,都没有时间更新博客,今天公司的事情忙完得空,继续为我的自定义控件系列博客添砖加瓦.本篇博客讲解的是标签自动换行的布局容器,正好前一阵子有个项目中需要,想了想没什么难度就自己弄了 ...

  3. ROS机器人程序设计(原书第2版)补充资料 (伍) 第五章 计算机视觉

    ROS机器人程序设计(原书第2版)补充资料 (伍) 第五章 计算机视觉 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 计算机视觉这章分为两 ...

  4. RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)

    一.消息队列使用场景或者其好处 消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 在项目启 ...

  5. Android下DrawerLayout的使用

    Android下DrawerLayout的使用 DrawerLayout见名知意,就是一个具有抽屉效果的布局,看看这个效果图,是不是感觉很炫酷 这么炫的效果其实不一定非要用类似一些SlidingMen ...

  6. iOS网络基础

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51376048 本文出自:[openXu的博客] 常用类 get请求 post请求 NSURL ...

  7. cocos2dx 3.2之Lua打飞机项目

    1          创建lua打飞机项目 cocos new T32Lua -dE:\Installed\cocos2d-x-3.2\cocos2d-x-3.2\projects -l lua 2 ...

  8. 02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写

     c3p0也是一个开源jdbc连接池,我们熟悉的Hibernate和Spring框架使用的都是该数据源. 这里获得数据源使用的方法是:ComboPooledDataSource 它提供的构造方法有 ...

  9. 详解EBS接口开发之销售订单挑库发放

     1. 对销售订单的有效性验证     1)检查销售订单的行是否被完全传回客户化表     2)验证销售订单的关键字段     3)检查子库存是否启用了货位控制,如果启用了货位控制,没有生成货位, ...

  10. Objc中为何某些类的属性要设置为copy而不是strong?

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 不知道大家是否注意,我们再使用一些第三方类的时候大多数情况下对 ...