面向对象程序设计(Object Oriented Programming)是把客观世界抽象成一个个的对象,并把对象作为编程的处理主体。Java语言是面向对象的程序设计语言,类和对象是面向对象的核心。类是对某一类对象共同特征的描述,也可以说是某一类对象的抽象概念。而对象是类的具体实例,有更多的具体细节。

人们归纳出的面向对象三大特征是封装、继承和多态。

一、封装(Encapsulation)

隐藏类的内部细节,只对外提供访问必要的隐藏细节的方法。因此,封装提出了两方面的要求:把该隐藏的隐藏,把该暴露的暴露。为了实现良好的封装,需要从两方面考虑:

  1. 将对象的成员变量和实现细节隐藏起来,不允许外部直接访问。
  2. 把方法暴露出来,让方法来控制对这些成员变量的安全访问和操作。

比如,启动电脑只需接通电源然后按下开机键即可,你不需要了解并手动实现将主机电源向主板供电,打开风扇,初始化启动程序…你只需要想清楚想做什么(what)即可,不需要想怎么做(how)

二、继承(Inheritance)

在Java语法中,使用 extends 关键字来实现子类继承父类。从英文原意来看,extends实为扩展,即从已有的类中拓展出一个新的类,实现了已有类的复用。翻译为继承也很好理解,子类继承自父类,子类获得了父类拥有的属性和方法。类似于生物学中的遗传现象,“龙生龙,凤生凤,老鼠生子打地洞”。

当然,子类继承自父类的特征后,一般也会有自己的特征,要不然两个类的特征一致容易造成代码冗余并且失去了复用父类目的的作用。这里的特征是指类的属性和方法。一个典型的例子是,子类重写(overwrite)父类的方法,实现了子类具体和个性的特征。

三、多态(polymorphism)

相同类型的变量,调用同一个方法时呈现出多种不同的行为特征,这就是多态。实现多态的支持是Java引用变量有两种类型:一个是编译时类型,一个是运行时类型。编译时类型有声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。如果编译时和运行时类型不一致,就可能出现多态。

看一个的多态例子:

  • 创建一个宠物类,定义一个模糊的吃动作
public class Pet {public void eat() {System.out.println("很难说清楚我吃什么");}
}
  • 创建一个狗类,定义一个具体的吃骨头动作
public class Dog extends Pet {@Overridepublic void eat() {System.out.println("我吃骨头...");}
}
  • 再创建一个猫类,定义一个具体的吃鱼动作
public class Cat extends Pet {@Overridepublic void eat() {System.out.println("我吃鱼...");}
}
  • 最后,创建一个测试类。运行时,会动态地改变宠物引用变量指向的对象。
public class PetTest {public static void main(String[] args) {Pet pet = new Pet();pet.eat();pet = new Dog();pet.eat();pet = new Cat();pet.eat();}
}
  • 最后输出:
很难说清楚我吃什么
我吃骨头...
我吃鱼...

由上面例子可以看出,引用变量运行时执行它运行时所具有的方法。需要注意的是,引用变量在编译阶段只能调用其编译时类型所具有的方法。比如,看下面的例子。

  • 在狗类中添加犬吠的方法bark()。
public void bark() {System.out.println("汪、汪、汪...");
}
  • 在测试类main方法中宠物引用变量执行狗类对象时,调用犬吠方法会发现报错:


编译时,宠物引用变量是宠物类型,宠物类中没有犬吠bark()方法,所以编译报错。

四、总结

封装、继承和多态是面向对象三大特征。利用拥有此三大特征的面向对象编程思想,实现了编程的灵活性,可以设计出易维护、易复用、易扩展的程序。除此之外,面向对象三大特征也是后面学习和理解设计模式的基础。

浅谈面向对象三大特征的理解相关推荐

  1. Java面向对象三大特征的理解

    面向对象三大特征的理解 初始理解 封装 继承 多态 初始理解 其实这些知识很早就有接触,而且一些概念也牢记于心了.自己叙述面向对象的特征会是这样的: 面向对象的三大特征是封装.继承和多态.封装是对代码 ...

  2. 浅谈数据库三大范式的理解

    首先声明一下,我的这个回答是个人工作总结,不适合考试答题昂. 欢迎关注我的博客. 前言:数据库设计其实不仅仅限制于三个范式,往下其实还有很多种,但对于大多数人来说,你又不搞科研,不造飞机大炮,掌握三大 ...

  3. c++面向对象三大特征封装、继承和多态知识总结

    面向对象三大特征:封装,继承,多态: 一.封装:该公开的就公开话,该私有的就隐藏掉,主要是由public,private实现:作用是便于分工和分模块,防止不必要的扩展: 二.继承:就是一种传承,可以把 ...

  4. 浅谈javaweb三大框架和MVC设计模式

    浅谈javaweb三大框架和MVC设计模式 转载自:http://blog.csdn.net/sunpeng19960715/article/details/50890705 小序:博主以前在学jav ...

  5. 『软件工程13』浅谈面向对象方法,统一建模语言UML

    浅谈面向对象方法UML 一.UML的含义 二.UML的主要内容 1.UML的概念模型 2.UML概念模型图例 三.UML的基本构造块 1.UML中的事物 (1)UML中的四种事物 (2)UML中各种事 ...

  6. Java面向对象三大特征---继承

    系列文章目录 Java面向对象三大特征-多态 Java面向对象三大特征-封装 文章目录 系列文章目录 前言 一.概念 二.举例说明 三.语句格式 三.为何要使用继承 四.super与this关键字 五 ...

  7. 细说面向对象三大特征

    一.软件设计的概况 1. 软件的生命周期 产品提出需求 分析以及规划 软件编码及其调试(自测,联调) 上测试环境,给测试人员测试(提bug) 上 linux 生产服务器(运维人员维护,修改bug,系统 ...

  8. Java基础(面向对象三大特征)

    面向对象三大特征 封装 继承 多态 1.封装 封装,顾名思义就是将一个东西通过层层包装裹起来,例如c语言中的结构体,将属性和方法封装在一起.更加具体的,发达国家对发展中国家进行技术垄断就是通过将高科技 ...

  9. JAVA面向对象三大特征:

    JAVA面向对象三大特征: 1.封装 (英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的 ...

最新文章

  1. oracle 插入 基准测试,oracle proc 插入操作性能优化实践
  2. 机房布线的最高境界……
  3. linux upx 报错 NotCompressibleException
  4. Jmeter之控制线程执行到某个结果时退出执行(第二种解决方案)
  5. 科研工作者一般怎么找文献?
  6. [py][mx]django form验证-给db减压
  7. Skybox边线消除的解决办法
  8. Codeforces 862D. Mahmoud and Ehab and the binary string 【二分】(交互)
  9. 创意产品 分析_使用联合分析来发展创意
  10. 树莓派基金会来号召用键盘生物学家研究企鹅
  11. Oracle初始化参数之memory_target
  12. leetcode 两个数组的交集 II
  13. 翻译文章第六章4-7
  14. 【JS跨域取XML】之——借助AS的URLLoader
  15. mac OS X下终端使用tree命令列目录
  16. 算法学习:最小生成树
  17. Tableau过期处理方法
  18. [JL]最后的晚餐 动态规划(DP) codevs5318
  19. 美化Hexo 个人博客
  20. 大数据解决方案:Hadoop监控

热门文章

  1. Python爬虫:Q房网房源信息
  2. Python字符串操作大全(一)
  3. Kodu(酷豆) 3D少儿编程
  4. 医疗健康产品展-京东健康
  5. [问题已处理]-vscode 自动补全的函数没有括号
  6. EWMA(Exponentially Weighted Moving Average)指数加权移动平均
  7. 行为心理学课件——性心理与性健康
  8. RAW图像处理软件 Capture One Pro 22Mac版
  9. 使用Glide加载、缓存图片、Gif、解决背景出现浅绿色、GlideModules冲突
  10. Go语言 下 govendor使用注意事项