面向对象


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

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

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

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

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

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

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

面向对象的好处:

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;
}
}

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

最新文章

  1. Android业务组件化之现状分析与探讨
  2. 《TCP/IP详解卷1:协议》第17、18章 TCP:传输控制协议(1)-读书笔记
  3. vista/win7/win8区别
  4. MySQL DBA面试全揭秘
  5. error C2065:未声明的标识符错误
  6. Oracle Database 12c Using duplicate standby database from active database Created Active DataGuard
  7. 程序员眼中的UML
  8. Ubuntu上用premake编译GDAL
  9. XenCenter注册码一年申请
  10. oracle_windows下命令启动oracle监听和服务
  11. ios 实现在tableViewCell上面添加长按手势 删除该条cell以及列表后台数据等
  12. Zookeeper 笔记-watch
  13. zipCrack-v1.1 工具介绍
  14. 翻译:SET PASSWORD语句(已提交到MariaDB官方手册)
  15. voinc+vue实现级联选择
  16. 通过URL传递中文参数的乱码处理
  17. 商务通服务器版LR_Data目录下相关配置文件
  18. DRBD搭建
  19. What is SolrCloud? (And how does it compare to master-slave?)
  20. openStack cpu绑定

热门文章

  1. java.io.IOException: Target host must not be null, or set in parameters. scheme=null, host=null, path=/
  2. SpringBoot入门到精通系列教程 - Filter/WebFilter
  3. 10分钟带你入门git到github
  4. Oracle dd-m月-yy转yyyy-mm-dd
  5. KafkaProducer 简析
  6. 茅坑杀手与Alias Method离散采样
  7. Eureka Server启动过程分析
  8. Ubuntu20.04编译ffmpeg
  9. 温故而知新--day1
  10. dbms_job和dbms_job基础学习