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