面向对象总结
一.概念
1)对比面向过程
面向过程的缺陷:缺乏对数据的封装
2)类和对象
类是对象的模板,对象是类的具体的实例
对象:真实存在的单个的个体
现实世界是由很多对象组成的,基于对象我们抽出了类
类:类型/类别,一类个体
- 所有对象所共有的特征/属性(静) —变量
- 所有对象锁共有的行为(动)——– 方法
- 一个类可以创建多个对象,结构相同,数据不同
引用:为了对实例化的对象进行访问控制
- 引用类型变量存放该类对象的地址信息,即指向该类的对象
- 除8中基本类型之外,用类、接口、数组等声明的变量成为引用变量,简称“引用”
二.面向对象的三个基本特征
1)封装
数据私有化(private),行为公开化(public)
意义:
- 对外提供可调用的,稳定的功能
- 封装容易变化的、具体的细节,外界不可访问,这样的意义在于:
- 降低代码出错的可能性,便于维护;
- 当内部的实现细节改变时,只要保证对外的功能定义不变,其他的模块就不会因此受到牵连;
static(静态的):
- 静态变量:
- 由static修饰
- 属于类的,存在方法区中,只有一份
- 通常使用类名点来访问
- 当所有对象的数据都一样的时候使用
- 静态方法:
- 由static修饰
- 属于类的,存在方法区中,只有一份
- 通常使用类名点来访问
- 没有隐式的this传递:没有this节意味着没有对象,而实例对象必须通过对象. 来访问, 所以静态方法中不能直接访问实例成员
- 方法的操作仅与参数相关而与对象无关时使用
- 静态域:
- 由static修饰
- 属于类的, 类被加载期间自动执行,类只能被加载一次,所以静态块也只执行一次
- 常常用于加载静态资源(图片、音频、视频)
2)继承
基本概念
- 目的:避免代码重复,有利于代码重用
- 通过extends实现继承
- 父类:所有子类所共有的属性和行为 子类:子类所特有的属性和行为
- 子类继承父类后,子类具有:子类+父类
- 一个父类可以有多个子类,一个子类只能有一个父类–单一继承
- 继承具有传递性
- java规定:构造子类之前必须先构造父类,构造中若没有调用父类的构造,则默认super()来调用父类的无参构造方法
相关内容
1. super:指代当前对象的父类对象
- super.成员变量名——访问父类的成员变量
- super.方法名()——–调用父类的方法
- super()————–调用父类的构造方法
2. 向上造型:
- 父类型的引用指向子类的对象(但是通过父类型的引用只能访问父类所定义的成员,不能访问子类扩展的部分)
- 能调用哪些方法变量,要看引用的类型
3. 重写:
- 发生在父子类中,方法名相同,参数列表相同,方法体不同
- 重写的方法被调用时,看对象的类型
- 重写和重载的区别:
- 重写:父子类中,方法名相同,参数列表相同,方法体不同;遵循“运行期”绑定,根据对象类型来调用方法
- 重载:一个类中,方法名相同,参数列表不同,方法体不同;遵循“编译期”绑定,根据引用的类型来绑定方法
3)多态
意义:
- 同一类型的引用指向不同的对象时,有不同的实现—行为的多态
- 同一对象被造型为不同的类型时,有不同的功能—–对象的多态
表现形式:
重写+重载
相关内容:
1. 向上造型
见继承里的那一块,补充:能造型成的类型有:父类型、实现的接口
2. 强制类型转换
成功的条件有两个:
- 引用所指向的对象,就是该类型
- 引用所指向的对象,实现了该接口
instanceof关键字
判断某个引用所指向对象是否为指定对象,返回boolean结果
3. 抽象方法和抽象类
- 抽象方法:
- 由abstract修饰
- 只有方法的定义,没有方法的实现(大括号都没有)
- 抽象类:
- 有abstract修饰
- 包括抽象方法的类必须是抽象类
- 抽象类不能被实例化
- 抽象类都是需要被继承的,子类:
- 重写所有抽象方法–常用
- 也声明为抽象类—-不常用
- 抽象类的意义:
- 包公共的属性和行为,被子类所共享–代码重用
- 为所有子类提供一种统一的类型——向上造型
- 包含抽象方法,为子类提供一个统一的入口
4. 接口
- 是一个标准、规范
- 由interface定义
- 只能包含常量和抽象方法
- 接口不能被实例化
- 接口是需要被实现/继承的,实现类/子类(implements):必须重写接口中的所有抽象方法
- 一个类可以实现多个接口,用逗号分隔;若又继承又实现时,应先继承extends后实现implements
- 接口可以继承接口
5. 内部类
- 成员内部类:不太常用
- 类中套类,外面的叫外部类,里面的叫内部类
- 内部类通常只服务于外部类,对外不具备可见性
- 内部类对象通常在外部类对象中常见的
- 内部类中可以直接访问外部类的成员(包括私有的);内部类中有个隐式的引用指向创建它的外部类对象
- 匿名内部类:比较常用
- 如果想创建一个类的对象,并且对象只被创建一次,此时该类不必命名,称为匿名内部类
- 匿名内部类中访问外部的数据,该数据必须是final的