zoukankan      html  css  js  c++  java
  • java基础-谈谈你对面向对象的理解

     

    一 前言

    本篇文章的核心知识如下,主要是帮助大家更好的理解面向对象编程; 在这里插入图片描述

    二面向对象VS面向过程

     

    2.1 面向过程编程

     

    面向过程编程(Process Oriented Programming )其意指是面向过程编程,what?,过程是什么?

    在这里插入图片描述

     

    面向过程编程其实是围绕着代码的执行过程而实现;我们打个比喻我现在想把昨天没洗的衣服给洗了(笑话,这绝对不是我,我用纯洁的人格担保!!!),我要执行的步骤如下:

    衣服倒进桶里; 将水倒进桶里;nei 添加洗衣液和各种香料等待30分钟 洗刷刷.....

     

    那转为代码就是:

     // 1这是个野生的方法---装衣服
    containClothes().......
    // 2这是个野生的方法-----倒水
    pourWater()..........
    // 3 这是个野生的方法-------倒洗衣液
    pourWashingLiquid()............
    // 4 这是个野生的方法-----洗刷刷
    washClothes().............

    好麻烦啊,我洗个衣服竟然要执行这么步骤,敬佩前辈么洗刷刷能力

    在这里插入图片描述

     

    2.2 面向对象编程

    面向对象编程(Object Oriented Programming,OOP)其意指面向对象编程,略略略......这不是废话么,没错啊就是这句废话,我们要理解的核心概念是什么是对象?

    在这里插入图片描述

     

    对象这个名称其实很普通啊,比如你家里人经常会说,孩子啊,最近有对象了,奶奶等等着报孙子里,...........,这是真的么?难道java中面向对象编程就是指生活中相处的对象?那我编写个女孩子对象,是不是就有对象啦,呵呵............,你想的真美好(跟代码生孩子去吧!!!);

     

    面向对象中的对象其实就是面向事物,《Think in java》中有一句话叫啥来着?万物皆对象...额,一切皆对象...额,没错啥都是对象;好吧如果你是初学者去面试,就别吹这就话了,你想跟老程序抢饭碗啊!!!

     

    在这里插入图片描述

    面向对象编程我们已经理解了,就是类似根据生活中中的事物编程,嗯?回到刚刚洗衣服的话题上,生活中的事物编程.......聪明如我这样的孩子已经想到了,本宝怎么会自己洗衣服呢!!!太low了,我要叫一个对象来给我洗衣服,我就不叫其他人帮我洗了,会遭天妒,还是叫最普通的把,比如洗衣机这个对象;

     

    我把衣服倒进洗衣机; 我把洗衣液倒进洗衣机; 开启启动程序,洗衣机麻烦你洗洗衣服啊哈哈;

    可以看见我们简化了一些步骤吖,不用拿桶了,不用自己洗衣服;转换成代码就是这样

     

    // 1 知识追寻者这个对象的方法---倒衣服
    zxzxz.pourClothes()........
    // 2 知识追寻者这个对象的方法---倒洗衣液
    zszxz.pourWashingLiquid()............
    // 3 洗衣机这个对象的方法-----洗衣服
    WashingMachine.washClothes().............

    面向对象中的对象在java编程中就是Object,每个对象都有自己的类型也就是Class,你可以这样理解,一个类型有多个对象实例(instance),比如,洗衣机有小天鹅洗衣机对象,海尔洗衣机对象;

     

    三 抽象

    面向对象的本质其实就是抽象;啥是抽象啊,好深奥的感觉,膜拜当年的大佬用了这么高大尚的术语;抽象我们通俗的理解就是将具体的功能和行为属性抽象出来看待成一个实体;说了这么多,你可能还是一脸懵逼........

     

    在这里插入图片描述

     

    就以洗衣机为例子,我现在要将洗衣机有容纳东西的功能,有排水的功能,有洗衣服的功能......好了这么多功能和属性我将它们都抽象出来形成一个实体;那么代码就是如下

    public class WashingMaching {

    public void contain(Object obj){
      // do contain
    }

    public void drainWater(){
      // do drain water
    }

    public void washingClothes(Clothes clothes){
     
    }

    }

    四 创建对象

     

    说了那么多关于对象的事情,但是永恒的主题你要告诉我对象是怎么创建的吧, 看如下代码,创建对象是通过 new 这个关键字创建;我们创建了一个对象叫做 wm,也就是实例,它属于 WashingMaching 这个类;执行drainWater()这个方法,表示实例wm执行了其成员方法;

     

    // create object
    WashingMaching wm = new WashingMaching();
    // invoke method
    wm.drainWater();

    五 面向对象的三大原则

     

     

    5.1 封装

    封装其实就是将对象的属性行为隐藏,使其不受外界干扰;我是个冷酷的孩子,不要用你那肮脏的想法揣测我!!!我内在神奇的能力你永远不知道;封装目的就是隐藏,防止被其他对象所破坏;就像人与人之间相处,一定要有隐私空间,难道你是暴露狂???

    在这里插入图片描述

     

    5.2 继承

     

    继承就是子类继承父类,子类将拥有父类的所有属性;说个玩笑,某某小伙子正在街头流浪,突然有一天一队军队围住了他,一个矮矮的胖子告诉他,皇帝驾崩啦,你是皇帝唯一的儿子,快跟我回宫登基为帝,继承家业吧!!!在java中都是单继承,所有的对象都有个父类就是Object;使用extends关键字表示继承关系;在继承中添加新方法可以扩展对象功能,重写父类方法可以实现子类特有功能;

    在这里插入图片描述

     

    5.3 多态

     

    多态表示一个对象可以表示出多种状态,即对象的状态是可以在子类和父类之间相互转换;举个简单的栗子:小水滴,晨露,雨滴,水雾,本质上都是水,我们认为他们都继承了水;小水滴可以转换成水,这就是向上转型(即向父类靠近),现在小水滴就表现出了2种状态,一种是水的状态,一种是小水滴的状态;如果说水要转换成晨露,就是向下转型(向子类靠近),但是下转型是有风险的,晨露是水,难道水就一定只有晨露这个状态么?显然不可能,水还可以转为雨滴,水雾等.....,通常向下转型是要做类型判断,使用关键字 instanceof判断;

    在这里插入图片描述

     

     

     

     

  • 相关阅读:
    [POJ] 食物链
    [POJ] Palindrome
    [POJ] The Triangle
    [Cpp primer] Library vector Type
    Shift Operations on C
    Masking operations
    [CSAPP] The Unicode Standard for text coding
    [Cpp primer] Library string Type
    [Cpp primer] range for (c++11)
    [Cpp primer] Namespace using Declarations
  • 原文地址:https://www.cnblogs.com/zszxz/p/12057962.html
Copyright © 2011-2022 走看看