面试系列——面向对象思想

一、三大特性

封装

利用抽象数据类型将数据和基于数据的操作封装在一起,使其成为一个不可分割的独立实体。数据被保护在抽象数据类型内部,尽可能地隐藏内部细节,只保留一些对外的接口使其与外部发生联系。

优点:

减少耦合:可以独立地开发、测试、优化、使用、理解和修改

减轻维护的负担:可以更容易被理解,并且在调试的时候可以不影响其他模块。

有效得调节性能:可以通过剖析来确定那些模块影响了系统的性能。

提高软件的可重用性

降低了构建大型系统的风险:即使整个系统不可用,但是这些独立的模块却有可能是可用的。

继承

继承实现了Is-A关系,例如Cat和Animal就是一种IS-A关系,因此Cat可以继承自Animal,从而获得Animal非private的属性和方法。

继承应该遵循里式替换原则,子类对象必须能够替换掉所有父类对象。

Cat可以当做Animal使用,也就是说可以使用Animal引用Cat对象。父类引用指向子类对象称为向上转型

多态

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

  • 编译时多态主要指方法的重载

  • 运行时多态指程序中定义的对象引用所指向的具体类型在运行期间才确定运行时多态有三个条件:

  • 继承

  • 覆盖(重写)

  • 向上转型

下面代码中,乐器类(Instrument)有两个子类:Wind和Percussion,它们都覆盖了父类的play()方法,并且在main()方法中使用父类Instrment来引用Wind和Percussion对象。在Instrument引用调用play()方法时,会执行实际引用对象所在类的play()方法,而不是Instrument类的方法。

public class Instrument {

    public void play() {
System.out.println("Instument is playing...");
}
}
public class Wind extends Instrument {

    public void play() {
System.out.println("Wind is playing...");
}
}
public class Percussion extends Instrument {

    public void play() {
System.out.println("Percussion is playing...");
}
}
public class Music {

    public static void main(String[] args) {
List<Instrument> instruments = new ArrayList<>();
instruments.add(new Wind());
instruments.add(new Percussion());
for(Instrument instrument : instruments) {
instrument.play();
}
}
}

最新文章

  1. 【CentOS】安装RPM包或者源码包
  2. Windows下 VM12虚拟机安装OS X 10.11 和VM TOOLS
  3. echarts异步加载柱状图遇到的错误- Error: Component series. not exists. Load it first.
  4. Object.ReferenceEquals
  5. SQL Server常用命令
  6. generator自动生成mybatis配置和类信息
  7. 将字符串拆分为id
  8. 关于Yii2中count方法的使用
  9. 索引查找(索引查找、分块查找) C语言实现
  10. 【转】IE浏览器快捷键大全
  11. ubuntu 14.04 重装机 安装笔记 无线网卡+cuda+nvidia
  12. OpenLayers Node环境安装运行构建-支持Vue集成OpenLayers
  13. js中的值类型和引用类型的区别
  14. Eclipse 02: 安装spring tool suite插件
  15. PHP生成QRCode二维码
  16. Linux fdisk命令操作磁盘(添加、删除、转换分区等)
  17. linux忘记root密码
  18. odoo创建编号
  19. MongoDB 之 Array Object 的特殊操作 MongoDB - 6
  20. ntp时钟同步

热门文章

  1. 【JAVA并发第四篇】线程安全
  2. 基于μcOS-II实时操作系统源码实现RMS和EDF调度(共享资源)
  3. JPEG解码——(5)反量化和逆ZigZag变换
  4. ReactElement源码笔记
  5. 剑指 Offer 63. 股票的最大利润 + 动态规划
  6. vue Element-ui el-menu 左侧导航条
  7. MySQL入门(4)——操作数据表
  8. MySQL入门(2)——存储引擎
  9. 【linux】制作deb包方法 **
  10. Trie、并查集、堆、Hash表学习过程以及遇到的问题