举个栗子:分析面向对象

原创 2018年04月16日 18:31:53

        作为一个java老程序员,经常会被问到什么是面向对象?网上很多的解释,实在难以理解,简单总结一下,我的看法,希望对初学者有点帮助。

    理解面向对象之前,首先举个栗子,明确一个概念,面向过程。

    面向过程:比如我想喝一杯咖啡,如果要是采用面向过程的思路,首先要种植咖啡,然后收获咖啡豆,然后打磨咖啡豆,然后冲泡咖啡,最后才能喝到咖啡。整个过程,都需要自己取“亲力亲为”,相对比较繁琐;并且每一个过程都要关注,不能出现问题,否则就没有办法达成目标;

    假如我们换一个思路,采用面向过程的思路呢?那整个过程就非常清晰明了了。你只需要到星巴克,吼一嗓子,给我来一杯卡布奇诺,然后热气腾腾的咖啡就来了。

    对比一下就会发现,面向对象的思路,整个过程很简单。我们程序员的角色发生了转变,从一个“执行者”,变成了“领导者”。其实在编程久了之后,体会就越来越深刻。

    下面从面向对象的三个特征来进一步探讨,加深理解。

    1.封装:

就是将属性私有化,提供公有的方法访问私有属性。做法就是:修改属性的可见性来限制对属性的访问,并为每一个属性创造一对取值(getter)和赋值(setter)方法,对这些属性访问。
基本的变量不再浮游于一大段一大段的程序中,而是寄居于庞大的“对象”内部,与外界隔开,通过迂回曲折的间接途径与外界通信(使用完毕可以由gc回收,节省了系统开销和内存)。在面向过程(C)的语言中,变量被暴露在整个程序中,不小心的一个修改可能导致整个程序出现错误。封装有利于让程序更加健壮

    2.继承:

    继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。它是指这样一种功能,使用现有类的功能,并在无需重新编写的情况下,对这些功能进行拓展。

   继承的特性:

  • 子类拥有父类非private的属性,方法。

  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

  • 子类可以用自己的方式实现父类的方法。

  • Java的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如A类继承B类,B类继承C类,所以按照关系就是C类是B类的父类,B类是A类的父类,这是java继承区别于C++继承的一个特性。

  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系)。

    3.多态:

    多态简单说是一个对象可以有多种形态。专业术语叫做父类引用,指向子类对象,调用方法时会调用子类的实现。

Parent instance = new Child();
instance.do(); //==> Child do()

另外在补充几个常见概念:

Overload:一个方法名,参数不同,这叫方法重载。   

void foo(String str);
void foo(int number);

Override:父类与子类有同样的方法名和参数,这叫方法覆盖。

class Parent {
    void foo() {
        System.out.println("Parent foo()");
    }
}
class Child extends Parent {
    void foo() {
        System.out.println("Child foo()");
    }
}
多态与继承体系有关,与方法覆盖有关,与方法重载无关。




详解Java中的equals()和==

1. 先来讲一讲equals() 很多类中都有自己的equals()方法,但他们其实都是覆写的java.lang.Object类中的equals()方法。 因为Java中所有的类都是继承于java...
  • lixibin0829
  • lixibin0829
  • 2018-02-12 17:32:24
  • 31

举个栗子

 一句话概述:举个栗子
  • sinat_16753919
  • sinat_16753919
  • 2018-02-07 21:31:28
  • 25

一切皆Socket

我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠so...
  • u014085790
  • u014085790
  • 2014-03-13 19:03:51
  • 503

HttpUtils(举个栗子)

1.javad代码//继承IXListViewListener String path = "http://ic.snssdk.com/2/article/v25/stream/?category=n...
  • qq_36088113
  • qq_36088113
  • 2016-10-23 19:22:54
  • 201

如何使用大规模机器学习解决真实的业务问题

推荐系统的本质是什么?比如说我们看到手机淘宝首页,往下一拉,就能看到各种各样推荐的商品;比如说百度,它会给我们推荐广告,在某种程度上他的工作方式也很像推荐系统;再比如说今日头条,今日头条从数十万的新闻...
  • chaishen10000
  • chaishen10000
  • 2018-02-14 02:27:30
  • 73

XListView_下拉刷新上拉加载(举个栗子)

1.配置Xlistview 2.java代码 xlv=(XListView)findViewById(R.id.xlv); //自定义加载数据 loaddata(); ...
  • qq_36088113
  • qq_36088113
  • 2016-10-16 23:45:46
  • 154

关于MVP设计模式举个栗子

MVP 全称:Model-View-Presenter ;MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供...
  • zull_kos_mos
  • zull_kos_mos
  • 2017-06-20 16:40:00
  • 145

Mysql++学习(三)------举个栗子

http://www.cnblogs.com/comoon/p/4118228.html 下面例子显示了如何建立利用Sql++建立一个连接,执行查询操作,返回一个结果集,并且打印. ...
  • oMingZi12345678
  • oMingZi12345678
  • 2015-12-06 22:09:25
  • 638

举个小栗子解释java动态代理

假设老板有个服务:用户说他自己的名字(xxx)。服务要对其说hello xxx. 老板便买了个机器人来执行这个服务。那么我们先定义一个服务类型接口:interface HelloService{ ...
  • u012685794
  • u012685794
  • 2016-12-28 22:19:00
  • 462
收藏助手
不良信息举报
您举报文章:举个栗子:分析面向对象
举报原因:
原因补充:

(最多只允许输入30个字)