1.面向对象的认知?
面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象。对同类对象抽象出其共性,形成类。类中的大多数数据,只能用本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信。程序流程由用户在使用中决定。对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象。
面向对象编程:(OOP: object-oriented programming)
面向对象与面向过程的区别
项目名称 | 面向对象程序设计 | 面向过程程序设计(也叫结构化编程) |
---|---|---|
定义 | 面向对象顾名思义就是把现实中的事务都抽象成为程序设计中的“对象”,其基本思想是一切皆对象,是一种“自下而上”的设计语言,先设计组件,再完成拼装。 | 面向过程是“自上而下”的设计语言,先定好框架,再增砖添瓦。通俗点,就是先定好main()函数,然后再逐步实现mian()函数中所要用到的其他方法。 |
特点 | 封装、继承、多态 | 算法+数据结构 |
优势 | 适用于大型复杂系统,方便复用、 | 适用于简单系统,容易理解 |
劣势 | 比较抽象、性能比面向过程低 | 难以应对复杂系统,难以复用,不易维护、不易扩展 |
对比 | 易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 | 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 |
设计语言 | ava、Smalltalk、EIFFEL、C++、Objective-、C#、Python等 |
| C ,Fortran |
类与对象的主要区别
对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
类:类是一个模板,它描述一类对象的行为和状态。
2.面向对象的特征以及理解?
- 封装 两层含义:一层含义是把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单元(即对象)中;另一层含义指“信息隐藏”,把不需要让外界知道的信息隐藏起来,有些对象的属性及行为允许外界用户知道或使用,但不允许更改,而另一些属性或行为,则不允许外界知晓,或只允许使用对象的功能,而尽可能隐藏对象的功能实现细节。
封装的优点
- 良好的封装能够减少耦合,符合程序设计追求“高内聚,低耦合”。
- 类内部的结构可以自由修改。
- 可以对成员变量进行更精确的控制。
- 隐藏信息实现细节。
实现Java封装的步骤:1 修改属性的
[
](https://blog.csdn.net/sugar_no1/article/details/86366714)
3.this和super?
this有三大作用:调用属性,调用方法,表示当前类对象
- this是自身的一个对象,代表对象本身,
可以理解为指向对象本身的一个指针, - this的用法在Java中可以分为3种,
- 1普通的直接引用,就是this相当于指向当前对象本身。
- 2 引用类的隐藏数据,(比如实体类中的Set方法,通过Set方法中的this。成员属性=参数名,给私有化的成员属性间接的赋值)
- 3 引用构造函数:this(参数):调用本类中另外一种形式的构造函数(应该为构造函数中的第一条语句)
super:也有三种方法:
1普通的直接引用:与与this类似,super相当于是指向当前对象的父类,这样就可以用super属性名,引用父类的非共有的成员成员属性。
2 子类中的成员方法或成员属性与父类的相同时,用来引用父类的成员属性或者是成员方法,(注意:构造函数时不可以被继承的)
3 引用构造函数:super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句)
this(参数):调用本类中另外一种形式的构造函数(应该为构造函数中的第一条语句)
可以用super和this分别调用父类的构造方法和本类中其他形式的构造方法。
super和this的异同:
- super(参数):调用父类中另一种形成的构造函数(应该为构造函数中的第一条语句)
- super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员函数据名(实参)
- this:它代表当前对象名(在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名)
- 调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
- super()和this()类似,区别是,super()从子类中调用父类的构造方法,this()在同一类内调用其它方法。
- super()和this()均需放在构造方法内第一行。
- 尽管可以用this调用一个构造器,但却不能调用两个。
- this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
- this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
- 从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
4.抽象类和接口(1.7和1.8)的区别?
5.各种关键字:static final instanceof?
6.装箱和拆箱?