【问题梳理】面向对象、封装、继承、多态、抽象、接口中(知识和点的整理)(上)
1、面向过程(pop)和面向对象(oop)的区别
-
面向过程:
- 主要关注点是:实现的具体过程,考虑怎么去做。
- 优点:对于业务逻辑简单的程序,可以达到快速的开发,减少前期的成本投入
- 缺点:对于业务逻辑复杂的程序,很难实现,而且元素之间的耦合度非常高,一个环节出现问题,整个系统都会受到影响,软件的扩展力差。没有独立的概念,无法实现复用。
-
面向对象:
-
主要关注点是:关注的对象或者独立体具备哪些功能,将功能封装进对象,强调的是具备功能的对象,考虑谁来做。
-
优点:耦合度低,扩展力强。更容易解决复杂的业务逻辑,组件复用性高。
-
缺点:前期的投入成本较高,需要进行独立体的抽取,大量的系统分析与设计。
c语言是纯面向过程、c++是半面向对象、Java纯面向对象
-
2、面向对象的特征是什么?
-
面向对象具有三大特征
-
封装
-
继承
-
多态
有的人理解为面向对象的四大特征:封装、继承、多态、(抽象、接口、)
-
-
为什么面向对象成为主流技术?
- 面向对象更符合人的思维模式,更容易去分析。
采用面向对象的方法开发一个软件,整个生命周期中贯穿使用OO面向对象方式。
- 面象对象的分析:OOA
- 面向对象的设计:OOD
- 面向对象的编程:OOP
3、 == 和 equals 的区别?
- ==
- 作为基本数据类型时,比较的是数值。
- 作为引用数据类型时,比较的是内存地址。
- equals
- 作为引用数据类型时,比较的是内存地址。
- 在String类型中比较的是值,因为String重写了equals方法。
4、String、StringBuffer 和 StringBuilder的区别?
主要是安全性的不同
- String > StringBuffer > StringBuilder (安全性大小)。
安全性越高,效率越低
对于常量值变化较多的时候,不建议使用String,浪费内存
5、权限修饰符(记忆)
修饰符 | 在同一个类中 | 在同一个包下 | 不同包的子类中 | 其他类 |
---|---|---|---|---|
public | 允许访问 | 允许访问 | 允许访问 | 允许访问 |
protected | 允许访问 | 允许访问 | 允许访问 | 不允许 |
默认 | 允许访问 | 允许访问 | 不允许 | 不允许 |
private | 允许访问 | 不允许 | 不允许 | 不允许 |
6、什么是封装?
(狭义上)
- 将对象的属性私有化。
- 对外提供赋值和取值的方法
(广义上)
- 就是将对象的属性和实现的过程进项隐藏,对外界只留下接口(方法/函数)通过这个接口来修改获取对象的属性和功能行为。
封装的目的:
增强信息流的安全性和简化编程,使用的时候可以直接特定的接口来使用类的成员(属性数据和函数都是类的成员)
封装的作用:
就是保护内部代码不被破坏
1、拒绝直接调用声明字段,保护内部的数据,更安全。
2、重复代码调用,避免代码冗余,程序编写效率高。
7、封装后给对象中的属性赋值有几种方法?
答:三种
- set方法赋值(封装后会对外部提供set方法赋值,get方法取值)
- 通过构造方法进行赋值(通过构造方法的参数进行赋值)
- 如果不是private修饰符修饰,可以直接赋值。
8、什么是继承?
继承发生在父类和子类之间,子类继承父类,使子类具有父类的属性和方法或者重新定义、追加
属性和方法等。
优点:继承使代码的复用更加简单容易,大大缩短了开发的周期,降低开发成本。
为什么需要继承
- 提高代码的复用性,使开发更加简单便捷。
- 起到扩展功能的作用。
9、方法重载和方法重写的区别
- 重载(Overload)
- 发生在同一个类中,方法名相同,参数列表不同,不考虑返回值。
- 重写(Override)
- 发生在父类和子类之间,子类继承父类的方法,方法名相同,参数也相同,但是实现方法体不同。
10、int和Integer的区别
- 默认值: int是0 Integer 是null
- Integer是int封装类 int-》Integer 装箱 Integer里的ValueOf
- Integer->int intValue()
int 是基本数据类型,Integer是引用数据类型。
11、接口和抽象类的区别
- 在构造方法上
- 抽象类有构造方法,但是不能被new出来。
- 接口没有抽象方法
- 在继承上
- 抽象类是单继承,(子类只能继承一个父类)。
- 接口可以继承多个接口,类可以实现多个接口。
- 在抽象方法上
- 抽象类可以没有抽象方法,但是有抽象方法的类必须是抽象类。
- 接口的方法必须是抽象方法,只有方法名,没有方法体。如果方法不是抽象方法则必须用default修饰(可以重写,也可以不被重写)
- 抽象类的抽象方法用public abstract修饰,接口可以省略。
变量:接口用public static final 修饰