• 一千个读者,一千个哈姆雷特。对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 。

  • 面向对象编程(OOP, Object Oriented Programming)是一种编写程序的方法,旨在提升开发大型程序的效率,使程序易于维护 。

  • 面向对象编程是一种基于以下思路的程序设计方法:将关注点置于对象(Object)本身,对象的构成要素包含对象的行为及操作,以此为基础进行编程。这种方法使程序易于复用,软件的生产效率因而得以提升。其中所使用的主要编程技巧有继承、封装、多态三种。

    1.封装

    通常认为是把数据和数据操作绑定起来,对数据的访问只能通过已定义的方法或者接口。面对对象的本质就是将现实世界描绘成一系列完全自治,封闭的对象.我们再类中编写的方法是对实现细节的一种封装,我们编写的类就是对数据和数据操作的封装,可以说,封装就是隐藏一切可以隐藏的东西(隐藏那些没必要展现给类调用者的成员),只向外界提供最简单的编程接口.(保护隐私),

public class Person {

	private Object data; //将成员私有化,外界无法修改属性值

	/*
* 暴露一个公有方法,外界只能通过这个方法改变对象的属性值
*/
public void setData(Object data) {
this.data = data;
} }

至于暴露接口这个,笔者我暂时也不是很理解…

public interface Service.{

	public void setData();
}

可能是给你一个service接口,你自己去实现serviceImpl,调用dao层给你的数据操作方法?(有待商榷)

2.继承

所谓继承是指继承已存在的类所拥有的成员而生成新的类,特殊和一般,子类和父类的区别;继承使变化的软件系统有一定的延续性.(复用性)

/*
* 父类
*/
public class Parent { public int age = 40;
public void eat() {
System.out.println("吃饭");
}
public void say() {
System.out.println("parent say");
} }
/*
* 子类,实现简单的继承动作
*/
public class Child extends Parent { }

测试

//测试
public static void main(String[] args) {
Parent p1 = new Parent();
Child c= new Child();
p1.eat();
c.eat(); //继承了父类的公有方法
p1.say();
c.say();
System.out.println(p1.age);
System.out.println(c.age);//继承了父类的公有属性
}

3.多态

多态是指针对同一种消息,不同的对象可以进行不同的操作(允许不同子类对同一消息做出不同的响应)

多态又分编译时多态和运行时多态:

编译时多态的实现方式是方法的重载,方法重载发生在同一个类种,同名的方法拥有不同的入参(参数个数或类型不同)视为重载.这样在编程阶段程序员可以根据不同的入参调用同名方法.

public class Demo {

	public void method() {
System.out.println("void");
} public boolean method(int a, int b) {
System.out.println(a == b);
return a == b;
} public static void main(String[] args) {
Demo d = new Demo();
d.method();
d.method(1, 2);
}
}



至于运行时多态,实现方式就是方法的重写,分三步走,一是子类继承父类,二是子类重写父类的方法(抽象,或者已有的非私有方法),三是父类变量引用子类的对象.

改写上面的子类,重写父类的say方法并测试

/*
* 子类,实现简单的继承动作
*/
public class Child extends Parent { @Override
public void say() {
// TODO Auto-generated method stub
System.out.println("child say");
}
public static void main(String[] args) {
Parent pc = new Child();
pc.say();
}
}

测试结果

多态的好处是解耦,系统中父类提供的是一个抽象方法,子类是对这个抽象方法的具体实现系统更新时,只需要换掉子类,如果布实现多态,就需要换掉整个父类,这样就可能牵一发而动全身.

另外实现接口也可以实现多态,不同类拥有同名的方法.(这点有待商榷)

面对对象编程(OOP, Object Oriented Programming)及其三个基本特性的更多相关文章

  1. 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)

    一.概述 面向过程:根据业务逻辑从上到下写代码 函数式:将具有一些功能的代码封装到函数中,需要的时候调用即可 面向对象:对函数进行分类和封装,让开发更方便,更快捷 Java和C#只支持面型对象编程,, ...

  2. JS面向对象程序设计(OOP:Object Oriented Programming)

    你是如何理解编程语言中的面向对象的? 我们研究JS和使用JS编程本身就是基于面向对象的思想来开发的,JS中的一切内容都可以统称为要研究的“对象”,我们按照功能特点把所有内容划分成“几个大类,还可以基于 ...

  3. oop(Object Oriented Programming)

    嗯,昨天忙了一天没来及发,过年啊,打扫啊,什么搽窗户啊,拖地啊,整理柜子啊,什么乱七八糟的都有,就是一个字,忙. 好了,废话也不多说,把自己学到的放上来吧.嗯,说什么好呢,就说原型链啊 原型对象 每个 ...

  4. 跟着百度学PHP[4]-OOP面对对象编程-1-什么是面对对象编程

    该阶段学习参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html 面向对象编程(Object Orie ...

  5. 编程范式 --- 面向协议编程(Protocol Oriented Programming,简称POP)

    面向协议编程(Protocol Oriented Programming,简称POP) 是Swift的一种编程范式,Apple于2015年WWDC踢出 在Swift的标准库中,能见到大量POP的影子 ...

  6. python面对对象编程----2:__init__

    面对对象编程估计我们最早接触到的就是__init__了,也就是实例的初始化处理过程: 1:来看看最基础的__init__ class Card(object): #抽象类Card,并不用于实例化 de ...

  7. Python学习6——再谈抽象(面对对象编程)

    1.对象魔法 在面对对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法. 使用对象而非全局变量以及函数的原因有多个,而最重要的好处不过以下几点: 多态:可对不同类型的对象 ...

  8. C++ 基础语法 快速复习笔记---面对对象编程(2)

    1.C++面对对象编程: a.定义: 类定义是以关键字 class 开头,后跟类的名称.类的主体是包含在一对花括号中.类定义后必须跟着一个分号或一个声明列表. 关键字 public 确定了类成员的访问 ...

  9. Object Oriented Programming python

    Object Oriented Programming python new concepts of the object oriented programming : class encapsula ...

随机推荐

  1. 5. Import the project download from Git

    1.Recover eclipse project Copy .project from other project(You can new a project first in eclipse. T ...

  2. hibernate4 , spring3 使用 org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean 报错 Implementing class

    错误代码如下 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with ...

  3. 2018.09.16 bzoj3626: [LNOI2014]LCA(树链剖分)

    传送门 树链剖分好题. 对于每个点维护一个值vi" role="presentation" style="position: relative;"&g ...

  4. 2018.07.17 HAOI2016 找相同字符(SAM)

    传送门 就是给两个字符串,让你求公共字串的个数. 本来大佬们都是用的广义后缀自动机,但我感觉后缀自动机已经可以做这道题了.我们对其中一个字串建出后缀自动机,然后用另外一个后缀自动机在上面统计贡献即可. ...

  5. C程序之修改Windows的控制台大小

    //change the console size #include <stdio.h> #include<stdlib.h> //必须有 int main(int argc, ...

  6. UVa 11292 Dragon of Loowater (水题,排序)

    题意:有n个条龙,在雇佣勇士去杀,每个勇士能力值为x,只能杀死头的直径y小于或等于自己能力值的龙,只能被雇佣一次,并且你要给x赏金,求最少的赏金. 析:很简单么,很明显,能力值高的杀直径大的,低的杀直 ...

  7. Linux创建其他用户并为之授权

    转载自:https://www.linuxidc.com/Linux/2016-11/137549.htm:加了一些补充说明 前言 笔记本安装了一个CentOS,想要让别人也可以登录访问,用自己的账号 ...

  8. 极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法

    1. 极小极大搜索方法    一般应用在博弈搜索中,比如:围棋,五子棋,象棋等.结果有三种可能:胜利.失败和平局.暴力搜索,如果想通过暴力搜索,把最终的结果得到的话,搜索树的深度太大了,机器不能满足, ...

  9. 被“1”和“l”给坑了

    由于输入法的原因,导致小写的英文字母“L”和阿拉伯数字“1”长得非常像,在写秘钥的时候很容易把看错.由于对方发秘钥的时候给的是图片,而且不太清晰,手动输入的时候把“1”写成“l”了,对了好几遍秘钥也没 ...

  10. [Openwrt 项目开发笔记]:MySQL配置(六)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在本人的项目中,运行在路由器上的服务器采用Ngi ...