在学习C语言的时候,老师和我们说它是一门面向过程的语言
那么面向对象与面向过程之间有什么区别呢?
面向过程就是自己干
面向对象就是别人干
举例:我们去吃饭
重点 饭是怎么来的
自己做饭:买菜-洗菜-切菜-炒菜——面向过程 这种事情至始至终都是我们自己解决问题
1.我们处于执行者
2.相对耗费时间、精力,做出来的结果也不一定是最优的
点外卖/去食堂:面向对象——这件事是由别人去做的,我们只需要等待结果
1.我们处于指挥者
2.相对节省时间、精力,做出来的结果一般是可观的
三大特征
1.封装:将对象不需要让外界访问的成员变量和方法私有化,只提供符合开发者的意愿的公有方法来访问数据,保证了数据的安全和程序的稳定。将对象的属性和行为看成一个密不可分的整体,将者两者放入一个不可分割的对象中。(一般用private修饰)
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类(不同包) | 不同包 |
公共 | public | 允许 | 允许 | 允许 | 允许 |
受保护 | protect | 允许 | 允许 | 允许 | 不允许 |
默认 | 允许 | 允许 | 不允许 | 不允许 | |
私有 | private | 允许 | 不允许 | 不允许 | 不允许 |
2.继承:子类可以继承父类的属性和方法,使得子类具有父类相同的行为,并对其进行拓展。
(
class 父类 {}
class 子类 extends 父类{}
)
3.多态:同一种类型的对象执行同一个方法可以表现出不同的行为特征。
方法:重载与覆写
--重载:同一个方法名称,根据不同的参数类型与个数可以完成不同的功能。
--覆写:同一个方法,根据操作的子类不同,完成的功能也不同。
对象:父子类对象的转换
--子类对象变为父类对象: 父类 父类对象 = 子类实例
Father father1 = new Son();
--父类对象变为子类对象: 子类 子类对象 = (子类)父类实例
类与对象
类必须通过对象才可以使用,对象的所有操作都在类中定义。
定义一个类的时候,主要从属性和行为两个方面来说
-属性:可以量化的,用数据来表示,都是一些变量——成员变量
-行为:行为是一些列的动作,这些系列的动作可以用函数来封装表示——成员函数
一个类想要真正的进行操作,必须依靠对象,对象的定义格式:
类名称 对象名称 = new 类名称()
抽象类和抽象方法
没有方法体的方法称为抽象方法,在一个类中如果有抽象方法,那么这个类就称之为抽象类
格式:
抽象类:abstract class 名称{}
抽象方法:修饰符 abstract 返回值类型 方法名(参数){方法体}
使用原则:
1.抽象方法必须为public或者protect,缺省情况下默认为public
2.抽象类不能实例化,需要依靠子类采用向上转型的方式处理
3.抽象类必须有子类,使用extends继承,一个子类只能继承一个抽象类
4.子类必须覆写抽象类之中的全部抽象方法(如果子类没有实现父类的抽象方法,则必须将子类定义为abstract)
abstract不能与哪些关键字共存?
(1)private:abstract方法需要被重写
(2)final:abstract方法需要被重写。被final修饰的方法是不能被重写的 。
(3)static:abstract方法没有方法体,没有实现不能产生对象,静态方法需要对方法体执行内容,static是属于类的,类本身是已经存在的对象
(4)synchronized:同步需要具体操作才能同步,abstract是只有声明没有实现的
抽象类与接口的区别:
1.抽象类用abstract修饰,接口用interface修饰
2.抽象类中可以有抽象方法和非抽象方法,接口中的所有方法都是抽象的,实现一个接口时,接口中的抽象方法都要被重写
3.抽象类不能被普通类多继承,但接口可以多实现
4.抽象类中可以有构造方法、静态代码块和静态方法,接口中没有构造方法、静态代码块
5.抽象类中的变量可以是各种各样的,接口中不能含有成员变量,除了final和static变量
6.子类继承抽象类时需要在子类中重写所有的抽象方法,子类在实现接口时需要重写接口中所有的方法
7.抽象类和接口都不能被实例化
局部变量与成员变量的区别
所属空间
局部:栈内存当中,函数的所属空间里
成员:堆内存当中,对象的所属空间里
生命周期
局部:随着函数的进栈而创建,随着函数的弹栈而消失
成员:随着对象的创建而创建,随着对象的消亡而消亡
初始化
局部:如果没有初始化的值,那么后面不能调用
成员:有默认初始化-显式初始化-针对性初始化
作用域
局部:前提是在函数中,在最近的一对大跨号内
成员:在本类的内部是全局(静态不能调用非静态)
如何区别重名的成员变量和局部变量的调用?
通过this关键字进行区别