JAVA面向对象的三大特性
1、封装
- 封装性是一种信息隐藏技术
- 概念: 隐藏对象的属性,仅对外提供公共访问方式
- 将一组逻辑相关的属性方法封装在类中,通过访问权限修饰符来隐藏内部细节,公开访问的接口的技术称为类的封装技术
- 隐藏内部细节,保护其不受外部影响,方便内部的修改
- 同时降低外部使用的复杂度
- 属性用private隐藏, 提供set方法和get方法来分别为属性设置值或者取得属性值,boolean的get方法使用is开头
2、继承
- 概念:一个类继承另一个类,则称继承的类为子类,被继承的类为父类,使用extends关键字
- 目的:实现代码的复用
- 继承后子类自动拥有了父类的属性和方法,但是父类的私有属性和构造方法不能被子类继承
继承的特点
- 子类继承父类
- 只支持单继承,不支持多继承,接口可以多继承
- 父类的方法子类自动拥有,可以实现代码的重复使用
super与this关键字
- this表示当前对象的引用,super表示当前对象父类的引用
- 继承与构造方法
- 子类继承父类,父类的构造方法先执行,子类的构造方法再执行
- 默认情况下,子类会优先调用父类无参的构造方法
- 子类调用父类的非默认构造方法,需要使用super关键字并且指定正确的参数类型
- super调用父类的构造器必须在子类的构造方法的第一行
3、多态
- 多态的含义
- 对外一种表现形式,内在有多种具体实现
- 多态的具体体现
- 方法覆盖
- 方法重载
- 多态参数
编译期类型和运行期类型
编译期类型和运行期类型相同的时候
A a = new A(); a.show(); 声明A的时候,使用到的类型A表示对象的类型,被称为编译期类型,在编译期,虚拟机认为a的类型是A,对于a所使用的属性和方法的有效性将到类A中去验证,构造方法A()中的A是运行期类型,在运行期,将执行运行期类型中的方法
当编译期类型和运行期类型当存在继承关系时,可能发生编译期类型和运行期类型不同的情况,即编译期类型是父类类型,运行期类型是子类类型
//A类是B类的父类 A ab = new B(); ab.show(); 对象ab的编译期类型为父类A类,运行期类型为子类B类,如果一个引用的编译期类型和运行期类型不同,那么一定是编译期类型与运行期类型有父类子类关系,或者接口与实现的关系。ab对象使用的方法,在编译期到类A中去校验,而运行则执行B类的方法,如果一个对象的编译期类型是父类,运行期类型是子类,可以对该对象进行强制类型转换,将其编译器类型转换为与运行期类型相同的类型,即:B b=(B)ab;
多态环境下的属性的方法的调用(Parent p = new Child();)
- 成员方法,运行期调用的是子类的方法
- 静态同名方法,运行期调用的是父类的方法
- 属性,运行期调用的是父类的
多态参数
- 某类的方法参数为父类、接口,支持传入子类或者是实现类
- 多态环境下的对象造型
- 向上转型,自然转型,小转大
- 向下转型,强制父类引用向下转型,大转小