什么是面向对象编程?
面向对象编程(Object-Oriented Programming),就是以对象作为程序基本单元,将程序和数据封装其中,进行复用的一种编程方式.
这句话是维基百科抄的,我还写不出那么抽象的东西.
用我自己的话来说,面向对象编程这个词翻译得很好,就是通过对象操作来编程的一种[[编程范式]],与之相关的还有指令式编程,函数式编程.
那什么是对象呢?对象是类的实例.(Instance of Class)
什么又是类的呢?类就是一个事物的抽象,包括数据形式(属性)和数据操作(方法).
写到这里突然发现,同一个概念可以用多种方法去阐述.
可以通俗易懂地打比方,也可以抽象地组织概念并不断深入.
介于我要在半年后参加秋招的关系,不宜过于简单或者过于抽象.
因此最好的办法就是通过别人的面试题来补足自己的理解.
所以接下来就集合各位兄弟们的面试题,来写这篇文章.
也希望对后来看到的兄弟们有帮助.
面向对象包含哪些特征?
比较常提到的面向对象的特征有1.封装,2.继承,3.多态,4.抽象四个.
封装
封装就是把数据和操作数据的方法绑定起来,使外部对于数据的访问只能通过特定的接口
封装就是把不需要对外提供的内容都(通过访问控制权限private,protected修饰符)隐藏起来,仅对外提供公共方法对其访问.
这么做的的目的是
- 保护对象免于用户非预期的访问(Encapsulation protects an object from unwanted access by clients)
- 允许不深入理解底层细节,访问一个层次(Encapsulation allows access to a level without revealing the complex details below that level)
- 减少人为失误(It reduce human errors)
- 简化应用维护(Simplies the maintenance of the application)
- 使应用易于理解(Makes the application easier to understand)
继承
继承就是使一个对象获得父类除private以外所有属性和方法的一种机制.
目的是
- 通过方法重写实现多态
- 代码复用
多态
多态是通过继承,覆盖或者重载父类方法,从而实现对父类方法的扩展.
优点很明确,就是通过较小的代价,灵活地对原有代码进行修改和扩展.
抽象
抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
抽象的作用:
1.为子类提供一个公共类型
2.封装子类中重复定义的内容
访问控制权限的区别
抽象类和接口异同
抽象类和接口都是JAVA实现OOP抽象的方法,都在继承树的上层,不能被实例化,都能包含抽象的方法.
语法层面可以通过这个表格清晰的了解.
比较 | 抽象类 | 接口 |
---|---|---|
默认方法 | 抽象类可以有默认的方法实现 | java 8之前,接口中不存在方法的实现. |
实现方式 | 子类使用extends关键字来继承抽象类.如果子类不是抽象类,子类需要提供抽象类中所声明方法的实现. | 子类使用implements来实现接口,需要提供接口中所有声明的实现. |
构造器 | 抽象类中可以有构造器, 接口中不能和正常类区别 | 抽象类不能被实例化 接口则是完全不同的类型 |
访问修饰符 | 抽象方法可以有public,protected和default等修饰 | 接口默认是public,不能使用其他修饰符 |
多继承 | 一个子类只能存在一个父类 | 一个子类可以存在多个接口 |
添加新方法 | 想抽象类中添加新方法,可以提供默认的实现,因此可以不修改子类现有的代码 | 如果往接口中添加新方法,则子类中需要实现该方法. |
设计层面,二者也存在差异. | ||
抽象类是其他类的模板,如果要对某个方法进行修改,仅需要在具体实现中进行修改. | ||
然而接口则是一种行为规范,是对类的行为进行约束.如果对其进行修改,则是牵一发动全身的. | ||
二者存在差异,因此也可以组合起来使用,比方说门和警报的例子 |
内部类
JAVA中有三种内部类(Inner Class)分别是普通的内部类(Inner Class),匿名内部类(Anoymous Nested Class),静态内部类(Static Nested Class)
- Inner Class和Anonymous Class本质上是相同的,都必须依附于Outer Class的实例,并拥有Outer Class的private访问权限
- Static Nested Class式独立类,但拥有Outer Class的private access authority
使用内部类,目的是实现更好的封装/数据安全,还有实现多继承
2021年4月7日15:55:13
未完待续,之后有新的内容再补充