简谈我所理解的面向对象

“什么是面向对象?”这个问题往往会问到刚毕业的新手or实习生上,也是往往作为一个技术面试的开头题。在这里我们不去谈如何答(fu)好(yan)问(guo)题(qu),仅谈谈我所理解的面向对象。

为什么“面向对象”?

最早的时候是面向过程。想象一下一堆C语言or汇编堆砌在一起的函数互相调(shang)用(hai)的场景————什么?你说你没学过C语言?那么你就想象一下一个复杂的SQL语句吧,有点像。

评论中有人提到了C语言并非完全不支持面向对象,Struct就是一个不错的选择。的确,但是C语言对面向对象的支持并不是那么的好。在绝大多数语言中都为Class(C++同时支持Struct和Class),但也有小部分语言沿用了这个经典的名字——比如Go语言。在这里特别说明是为了防止误导新手

把大象装进冰箱需要几步?

我们以“把大象装进冰箱需要几步”这个经典的脑经急转弯来举个例子吧:

面向过程

打开冰箱,装入大象,关上冰箱。这三步就是面向过程的思考方式,这种思想强调的是过程,也可以叫做动作。

open(icebox);
putIn(icebox,elephant);
close(icebox);

面向对象

冰箱打开,冰箱存储,冰箱关闭。这就是面向对象的思考方式,这种方式强调是对象,也可以说是实例。

//我们有一个冰箱
Icebox iceBox = new iceBox();
//可不能忘记大象,就叫它jake吧
Elephant jake = new Elephant();
icebox.open();
icebox.save(jake);
icebox.close();

什么是面向对象?

一种编程范式,相对于面向过程。为了方便在编程中更接近地去描述现实世界中的万物(万物皆对象),我们将对一个事物的描述称之为类,而对象则是该事物的实例

在类中,我们把事物的属性转变为编程中的变量,把事物的行为转变为方法。

Class Elephant{
  public String name;
  public int age;
  public double weight;
  //更多的属性......

  //在这里的方法为了方便演示都是void
  public void eat(Food food){
    //吃东西
  }
  //更多的行为.......
}

对象

//我们再次召唤了jake
Elephant jake = new Elephant();
//他随便吃了点什么
jake.eat(new Something);

面向对象的特性

继承

可以使子类复用父类公开的变量、方法

//几百年后,jake和它的子孙们进化成了更强的大象
//它们被称为:飞象
Class FlyElephant extends Elephant{
  public void fly(){
    //i belive i can fly~~
  }
}

//其中有一头飞象叫jason
FlyElephant jason = new FlyElephant();
//过了这么长时间,jake那时
//不要问大象为什么能飞!
jason.fly();
//而且还可以像其他大象一样正常的吃东西
jason.eat(new Something);

封装

屏蔽一系列的细节。使外部调用时只要知道这个方法的存在

  • jason在eat的时候它或许先会分泌一点激素有助于它进食,然而我们在调用的时候并不知道发生了什么。

多态

父类的方法继承的到子类以后可以有不同的实现方式

  • jason在eat的时候它或许先会分泌一点激素有助于它进食,而jack在eat的时候或许会先刷个牙齿。

面向对象的好处

  1. 接近人的思维,符合人类对现实世界的认知;

  2. 封装特性可以使开发者不必在意内部的具体实现,更方便互相协作;

  3. 继承特性可以减少代码冗余,实现代码复用;

  4. 多态特性令子类相比父类有不同的行为,这是非常接近现实的;

最后

  • 以上仅为个人理解,如果有任何错误望各位及时指出,感激不尽!

  • Java是一个对面向对象编程支持非常到位的语言,诸君可以一试。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值