举个栗子:分析面向对象

        作为一个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()");
    }
}
多态与继承体系有关,与方法覆盖有关,与方法重载无关。




阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页