面试系列<5>——面向对象
2024-09-07 00:45:34
面试系列——面向对象思想
一、三大特性
封装
利用抽象数据类型将数据和基于数据的操作封装在一起,使其成为一个不可分割的独立实体。数据被保护在抽象数据类型内部,尽可能地隐藏内部细节,只保留一些对外的接口使其与外部发生联系。
优点:
减少耦合:可以独立地开发、测试、优化、使用、理解和修改
减轻维护的负担:可以更容易被理解,并且在调试的时候可以不影响其他模块。
有效得调节性能:可以通过剖析来确定那些模块影响了系统的性能。
提高软件的可重用性
降低了构建大型系统的风险:即使整个系统不可用,但是这些独立的模块却有可能是可用的。
继承
继承实现了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();
}
}
}
最新文章
- 【CentOS】安装RPM包或者源码包
- Windows下 VM12虚拟机安装OS X 10.11 和VM TOOLS
- echarts异步加载柱状图遇到的错误- Error: Component series. not exists. Load it first.
- Object.ReferenceEquals
- SQL Server常用命令
- generator自动生成mybatis配置和类信息
- 将字符串拆分为id
- 关于Yii2中count方法的使用
- 索引查找(索引查找、分块查找) C语言实现
- 【转】IE浏览器快捷键大全
- ubuntu 14.04 重装机 安装笔记 无线网卡+cuda+nvidia
- OpenLayers Node环境安装运行构建-支持Vue集成OpenLayers
- js中的值类型和引用类型的区别
- Eclipse 02: 安装spring tool suite插件
- PHP生成QRCode二维码
- Linux fdisk命令操作磁盘(添加、删除、转换分区等)
- linux忘记root密码
- odoo创建编号
- MongoDB 之 Array Object 的特殊操作 MongoDB - 6
- ntp时钟同步