文章目录
一、类的基础知识
属性:字段Field 成员变量
默认初始化:
数字:0 0.0
char: u0000
boolean: false
引用:null
修饰符 属性类型 属性名 = 属性值
方法
- 静态方法:使用static关键字修饰的方法,属于类的,不属于对象,静态方法可以直接调用,类名调用和对象调用;
- 非静态方法:不使用static关键字修饰的普通方法,属于对象,不属于类,非静态方法只能通过对象调用。
对象的创建与使用
- 必须使用new关键字创造对象,使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用
- 对象的属性
object.property
- 对象的方法
object.method()
类的存储形式
四种访问修饰符的访问范围
访问级别 | 访问控制修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | × |
默认 | 无修饰符 | √ | √ | × | × |
私有 | private | √ | × | × | × |
二、三大特性
面向对象的本质:以类的方式组织代码,以对象的组织(封装)数据。
封装
- 将成员变量私有(private)
- 提供set方法设置属性值,get方法获取属性值
- 将set方法写入构造器
继承
- 继承的本质是对某一批类的抽象,子类是父类的扩展
- 默认先调用父类的无参构造器,然后调用子类本身构造器
- JAVA中类只有单继承,没有多继承,但接口可以多继承
- 子类通过this访问自己的属性和方法,super访问父类属性和方法
super与this的区别
No. | 区别点 | this | super |
---|---|---|---|
1 | 访问属性 | 访问本类中的属性,如果本类没有此属性则从父类中继续查找 | 访问父类中的属性 |
2 | 调用方法 | 访问本类中的方法,如果本类没有此方法则从父类中继续查找 | 访问父类中的方法 |
3 | 调用构造器 | 调用本类构造器,必须放在构造器的首行 | 调用父类构造器,必须放在子类构造器的首行 |
4 | 特殊 | 表示当前对象 | 子类中访问父类对象 |
方法重载、重写
名称 | 发生范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
---|---|---|---|---|---|
重载(overload) | 本类 | 必须一样 | 类型个数或顺序至少一个不同 | 无要求 | 无要求 |
重写(override) | 父子类 | 必须一样 | 相同 | 子类返回类型与父类一致,或是其子类 | 子类不能缩小父类的访问权限 |
多态
多态:方法或对象具有多种形态,是OOP的第三大特征,建立在封装和继承之上,重载和重写都体现了多态
(1)多态的前提:两个类之间存在继承关系。
(2)属性没有重写之说,属性的值看编译类型。
(3)instanceof比较操作符,用于判断对象的运行类型是否为XX类型或XX类型的子类型
对象的多态
(1)一个对象的编译类型可以和运行类型不一致
(2)编译类型在定义对象时就确定了,不能改变
(3)运行类型是可以变化的
(4)编译类型看定义时 = 号左边,运行类型看 = 号右边
向上转型
(1)本质:父类的引用指向了子类的对象
(2)语法:父类类型 引用名 = new 子类类型()
(3)特点:
- 编译类型看左边,运行类型看右边
- 可以调用父类的所有成员(需遵守访问权限)
- 不能调用子类中特有成员
- 最终的运行效果看子类的具体实现
向下转型
(1)语法:子类类型 引用名 = (子类类型) 父类引用;
(2)只能强转父类的引用,不能强转父类的对象
(3)要求父类的引用必须指向的是当前目标类型的对象
(4)可以调用子类类型中所有的成员