面向对象中级部分包括以下这些部分:
包
包的本质是创建不同的文件夹或者是类来可以保存同名的类。
基本语法
package com.包名;
包的命名: 只能包含数字、下划线、校园地、字母, 不能是数字开头,不能是保留字。 一般是公司名.项目名.义务模块名。 com.sina.crm.urser.
访问修饰符
4种不同的访问修饰符.
访问级别 | 访问修饰符 | 同类 | 同包 | 子类 | 不同包 |
公开 | public | 是 | 是 | 是 | 是 |
受保护 | proteccted | 是 | 是 | 是 | 不是 |
默认 | 无 | 是 | 是 | 不是 | 不是 |
私有 | private | 是 | 不是 | 不是 | 不是 |
封装
数据在内部被保护,只能通过成员方法来访问。也简化了他人的使用。
好处
- 隐藏实现细节
- 对数据验证,保证安全和合理
实现
- 属性要被private修饰
- 提供一个公共的public方法,一般名为set,用于对成员属性的判断并赋值
- 提供一个公共的get方法,用于获取属性的值。公共的set方法在设置属性的值
- 可以与构造器结合的方式,在构造器中调用成员方法来约束和规范输入的成员属性
继承
-
有些类会有相同的部分,比如学生都会有名字年龄属性,都会有考试 ,学习方法。
-
当多个类存在如上情况时,可以抽象出父类,在父类中可以定义这些相同的属性和方法。
-
所有的子类不需要重新定义父类的方法。用extends关键字继承父类。
-
父类也叫基类、超类,子类也叫派生类。子类也可以被另一个子类继承。
-
子类会拥有父类的属性和方法
基本语法
class 子类名称 extends 父类名称{
}
注意点
- 子类必须调用父类的构造器,完成父类的初始化
- 默认调用父类无参构造器,如果没有, 利用super();在子类中调用有参构造器,
- super 必须放在构造器第一行
- super() this()只能放在第一行,两个方法不能共存
子类查找关系
在类初始化时, 需要注意 在方法区中类初始化子类时,会一直追溯父类直到Object类停止。
然后就是正常的对象初始化程序
super关键字 注意事项
- 不能访问父类的私有属性
- 不能访问父类的私有方法
- 放在第一行
- 好处 :分工明确:1. 子类初始化子类的,父类初始化父类的。 2. 子类如有方法与父类重名为了访问父类方法有super。3. 傅佩荣可以访问更上级的父类。
super和this的比较
区别 | this | super |
访问属性 | 可访问本类属性,若没找到,则在父类中寻找 | 从父类开始查找 |
调用方法 | 访问本类方法,若没有此方法,在父类中寻找 | 从父类方法中开始查找 |
调用构造器 | 本类构造器,放首行 | 父类构造器,放首行 |
特殊 | 表示当前对象 | 子类访问的父类对象 |
重写/覆盖
- 子类的形参列表,方法名称要和父类的形参列表,方法名称一致
- 子类的返回类型要和父类的返回类型一致,或者时父类返回类型的子类,例如 父类返回Object,子类可返回String
- 子类不饿能缩小父类的访问权限
重写和重载的比较
名称 | 范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
重载 | 本类 | 必须一样 | 必须不同 | 不相关 | 不相关 |
重写 | 父类和子类 | 必须一样 | 相同 | 返回类型相同,或者父类的返回类型是子类的父类 | 子类方法不能缩小父类方法的访问范围 |
多态
多态建立在封装和继承的基础之上。方法重写和重载都可以体现多态。
对象多态
- 一个对象的编译类型和运行类型可以不一致。
- 编译类型在定义是已经确定
- 运行类型可以变化
- 编译类型 对象名 = new 运行类型
- 前提两个对象存在继承关系
多态向上转型
- 本质是父类的引用指向子类的对象
- 语法: 父类类型 对象名 = new 子类类型();
- 可以调用父类中的所有成员,不包括私有类型,不能调用子类的特有成员。因为在编译过程中,编译类型是父类类型,父类类型不具备子类类型的成员
多态向下转型
- 语法: 子类类型 对象名 = (子类类型) 父类引用;
- 只能强转父类的引用,不能强父类的对象
- 要求父类的引用必须指向当前目标类型的对象
- 当向下转型后可以调用子类的所有成员
instanceOf 比较操作符,可以判断对象的运行类型是否为 输入对象的类型或子类类型
动态绑定机制
- 当调用对象的方法是,该对象回合该对象的内存地址/运行类型绑定,就是说会找运行类型的方法,等号右侧的方法。
- 当调用对象的属性是,没用动态绑定机制,看申明的类型就是编译类型的属性
object 类
== 和 equals方法
==是 比较运算符, 如果判断是基本类型,判断值是否相等。如果判断应用类型,看地址是否相等
equals 是object类中的方法,只能用在判断引用类型。默认地址是否相等,子类中往往重写。
光标放在方法位置 按CTRL+b可查看源码。
简要了解object类的三个方法 hashcode finalize和 toString
hashcode
返回对象的哈希码值。两个引用,指向同一个对象哈希值相同。
toString
返回全类名@哈希值十六进制表示,直接输出对象是toString默认被调用。
finalize
当对象被回收时,系统自动调用finalize方法 做一些释放资源的操作。当某个对象没有任何引用时会被调用。