面向对象


面向过程:根据业务逻辑从上到下写代码

函数式编程:对一些功能的代码封装到函数中,日后无需重复编写,直接调用函数就可以了

面向对象:将所有的功能进行封装,面对的事封装了功能的实体(对象),即面向对象。

面向对象基于面向过程,只是把过程进行了对象的封装。

只要找到了对象,就可以使用对象中的功能。

通俗点讲,你去饭店去吃水煮肉,你不需要会做水煮肉,只需要告诉大厨你要吃水煮肉,他会做就可以了,你直接指挥他给你做就可以了,这就是面向对象。

所以,以后开发,先找对象以及对象的功能。如果没有,自己创建对象并将所需的功能定义到该对象中。

面向对象的好处:

1.面向对象是一种更符合人们思考习惯的思想

2.面向过程中更多的体现的是执行者,面向对象中更多的体现的是指挥者。

3.面向对象将复杂的问题简单化了。

佛曰:世间万物皆为对象。

面向对象如何应用到需求中呢?

在需求中尽量地去寻找对象。(从问题领域抽取对象)

最简单的思考访问:一般情况,名词表示的大多是对象。

比如:

需求:将大象装进冰箱里。

对象就是:大象,冰箱

一副图简单介绍对象的关系

可以理解为:

类就是图纸

汽车就是堆内存中的对象

类的定义

生活中描述事物无非就是描述事物的属性行为

比如:人有身高体重的属性,有吃饭,睡觉等行为。

描述人可以这样描述:

事物的属性:
身高;
体重;
事物的行为(功能):
吃饭;
睡觉

简单理解:属性就是数值,其实就是变量;行为就是功能,就是函数。

java中用类class描述事物也是如此。

属性:对应类中的成员变量

行为:对应类中的成员函数

定义类其实是在定义类中的成员变量和成员函数

类与对象的关系:

  • 类:对事物的描述。需要体现属性和行为。

  • 对象:该类食物创建的实例(实体),通过该对象调用具有的属性和行为。

成员变量和局部变量的区别?

成员变量

  • 成员变量定义在类中,在整个类中都可以被访问

  • 成员变量随着对象的建立而建立,存在于对象所在的堆内存中。

  • 成员变量有默认的初始化值。

局部变量

  • 局部变量之定义在局部范围内,如:函数内,语句内等
  • 局部变量存在于栈内存中
  • 作用的范围结束,变量空间会自动释放
  • 局部变量没有默认初始化值
    class Person{
//定义属性
int height;//身高
int weight;//体重 //定义方法
public void eat(){
System.out.println("eatting..."); //吃饭
}
public void Zzzz(){
System.out.println("Zzzzzz..."); //睡觉
}
}

欢喜冤家public和private(私有)

private关键字

  • 是一个权限修饰符
  • 用于修饰成员(成员变量和成员函数)
  • 被私有化的成员只在本类中有效

常用的方法:

  • 将成员变量私有化,对外提供对应的setget方法对其进行访问。提高对数据访问的安全性。

先来看public和private的区别

class PersonDemo1{
public static void main(String[] args){
Person p = new Person();
System.out.println(p.weight);
System.out.println(p.height);
}
}
class Person{
private int height;
public int weight = 60;
public void eat(){
System.out.println("eatting...");
}
public void Zzzz(){
System.out.println("Zzzzzz...");
}
}

如果只输出体重的话,是可以输出的,因为体重是public修饰的,意思是都可以访问。

而身高,被private修饰之后,就成了私有变量,外部就不能访问,编译之后报错:

PersonDemo1.java:5: 错误: height 在 Person 中是 private 访问控制
System.out.println(p.height);

有些属性(变量)不想被外界更改,或者不想被外界调用,可以使用private。

那如果想被使用呢,那么就对外提供对应的setget方法对其进行访问。提高对数据访问的安全性。

class PersonDemo1{
public static void main(String[] args){
Person p = new Person();
p.setHeight(175); //通过set方法对私有变量进行操作
System.out.println(p.weight);
System.out.println(p.getHeight()); //调用方法记得加()
}
}
class Person{
private int height;
public int weight = 60;
public void eat(){
System.out.println("eatting...");
}
public void Zzzz(){
System.out.println("Zzzzzz...");
}
//设置外部访问的接口,写接口
public void setHeight(int h){
height = h;
}
//设置外部访问的接口,读接口
public int getHeight(){
return height;
}
}

这就是面向对象三个特性之一——封装

Java面向对象(一)----初次见面的更多相关文章

  1. JAVA面向对象

    JAVA面向对象 对象   我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象   只要是对象--属性和行为(方法)   属性   对象有什么   例如:学生有姓名.学 ...

  2. 理解JAVA - 面向对象(object) - 属性,方法

    理解JAVA - 面向对象(object) - 属性,方法 多态的体现:    向上造型,父类接收子类对象:向上造型:    从父类角度看不到子类独有的方法:面向对象,人类认知世界的方式:生活中每天都 ...

  3. Java面向对象㈠ -- 封装

    Java的面向对象有三大特征:封装.继承.多态.这里主要对封装进行讲解. 封装可以理解为隐藏一个类的成员变量和成员函数,只对外提供需要提供的成员函数. Java的封装主要通过访问权限控制符:priva ...

  4. 谈谈Java面向对象的三大特性

    Java面向对象的三大特性就是指封装.继承.多态了. 一.封装: 概念:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式. (举例:笔记本电脑就是一个封装体,Java语言中最小的封装体就是函数 ...

  5. Java面向对象:接口

    Java面向对象之接口 什么是接口:接口是一种规范和标准,他们可以约束类的行为,是一些方法特征的集合 语法: [修饰符] interface 接口名 extends 父接口1,夫接口2....... ...

  6. 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...

  7. java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final

    一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...

  8. 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》

    20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...

  9. 20145213《Java程序设计》实验二Java面向对象程序设计实验报告

    20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...

  10. 20145206《Java程序设计》实验二Java面向对象程序设计实验报告

    20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...

随机推荐

  1. Autofac的基本使用---2、普通类型

    Autofac的基本使用---目录 准备 使用的表是Student,创建相关的IDAL.DAL.IBLL.BLL层. 使用EF,创建一个Model层,存放edmx文件. 控制台程序的使用 using ...

  2. [leetcode]24. Swap Nodes in Pairs交换链表的节点

    感觉这个题后台的运行程序有问题,一开始自己想的是反转链表那道题的方法,只是隔一个节点执行一次,但是没有通过,TLE了,但是很奇怪,并没有死循环,就是最后返回的时候超时. 最后的思路就是很简单的进行交换 ...

  3. C# 使用 log4net 日志组件

    一. 什么是 log4net  Apache log4net 库是帮助程序员将日志语句输出到各种输出目标的工具,它是从Java中的Log4j迁移过来的一个.Net版的开源日志框架.log4net 的一 ...

  4. java零基础之---eclipse的使用

    想写一篇关于初学者如何使用工具的博客,作为初学者使用IDE的第一个工具,深受大家喜欢,先写一篇eclipse的,然后再逐步推出idea, vscode 等 1. eclipse的下载及安装 1)百度搜 ...

  5. Java源码系列4——HashMap扩容时究竟对链表和红黑树做了什么?

    我们知道 HashMap 的底层是由数组,链表,红黑树组成的,在 HashMap 做扩容操作时,除了把数组容量扩大为原来的两倍外,还会对所有元素重新计算 hash 值,因为长度扩大以后,hash值也随 ...

  6. DML、DDL、DCL

    总体解释:DML(data manipulation language):       它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据 ...

  7. Sublime Text 3 习惯插件 转

    原帖:https://www.cnblogs.com/hykun/p/sublimeText3.html Emmet插件 Emmet插件可以说是使用Sublime Text进行前端开发必不可少的插件 ...

  8. filleSystemBasises

    基本查询命令 pwd 查看当前目录 dir 显示当前目录下的文件信息 more 查看文本文件的具体内容 cd 修改用户当前目录 mkdir 创建新的目录 rmdir 删除目录 copy filenam ...

  9. ArrayDeque API 与算法分析

    ArrayDeque 是双端队列的动态数组实现,可以当作栈和队列来使用.作为栈时,它的效率比 Stack 更高,作为队列时,效率比 LinkedList 更高.ArrayDeque 大部分操作的时间复 ...

  10. 【Dart】语言概述

    // 导入(import) // 导入核心库 //导入外部库 import 'package:test_api/test_api.dart'; // 导入文件 //import 'path/test. ...