JAVA 面向对象编程

什么是面向对象编程?

面向对象编程(Object-Oriented Programming),就是以对象作为程序基本单元,将程序和数据封装其中,进行复用的一种编程方式.
这句话是维基百科抄的,我还写不出那么抽象的东西.
用我自己的话来说,面向对象编程这个词翻译得很好,就是通过对象操作来编程的一种[[编程范式]],与之相关的还有指令式编程,函数式编程.
那什么是对象呢?对象是类的实例.(Instance of Class)
什么又是类的呢?类就是一个事物的抽象,包括数据形式(属性)和数据操作(方法).


写到这里突然发现,同一个概念可以用多种方法去阐述.
可以通俗易懂地打比方,也可以抽象地组织概念并不断深入.
介于我要在半年后参加秋招的关系,不宜过于简单或者过于抽象.
因此最好的办法就是通过别人的面试题来补足自己的理解.
所以接下来就集合各位兄弟们的面试题,来写这篇文章.
也希望对后来看到的兄弟们有帮助.

面向对象包含哪些特征?

比较常提到的面向对象的特征有1.封装,2.继承,3.多态,4.抽象四个.

封装

封装就是把数据和操作数据的方法绑定起来,使外部对于数据的访问只能通过特定的接口
封装就是把不需要对外提供的内容都(通过访问控制权限private,protected修饰符)隐藏起来,仅对外提供公共方法对其访问.
这么做的的目的是

  1. 保护对象免于用户非预期的访问(Encapsulation protects an object from unwanted access by clients)
  2. 允许不深入理解底层细节,访问一个层次(Encapsulation allows access to a level without revealing the complex details below that level)
  3. 减少人为失误(It reduce human errors)
  4. 简化应用维护(Simplies the maintenance of the application)
  5. 使应用易于理解(Makes the application easier to understand)

继承

继承就是使一个对象获得父类除private以外所有属性和方法的一种机制.
目的是

  1. 通过方法重写实现多态
  2. 代码复用

多态

多态是通过继承,覆盖或者重载父类方法,从而实现对父类方法的扩展.
优点很明确,就是通过较小的代价,灵活地对原有代码进行修改和扩展.

抽象

抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
抽象的作用:
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
未完待续,之后有新的内容再补充

参考

  1. 面向对象程序设计
  2. 编程范式:命令式编程(Imperative)、声明式编程(Declarative)和函数式编程(Functional)
  3. 编程范型
  4. 泛型编程
  5. 廖雪峰-面向对象编程
  6. Advantages of Encapsulation
  7. java中private,public,protected详解
  8. inheritance-in-java
  9. polymorphism-in-java
  10. 面向对象的基本特征
  11. 面向对象面试题
  12. 廖雪峰-内部类
  13. java内部类有什么作用?
  14. 深入理解Java的接口和抽象类
  15. 接口和抽象类有什么区别?
原文地址:https://www.cnblogs.com/rpish/p/14628144.html