Java
中面向对象编程部分同样具有三大特性:封装
、继承
和多态
面向对象编程三大特性———封装、继承、多态 - 掘金
一、封装
封装的思想
:将一个类的属性和方法封装起来。可以暴露的部分就对外暴露出去,不能暴露的就保护起来类的组成
:属性和方法
1. 四种访问权限
Java中的四种访问权限:public、protected、包访问、private - 掘金
Java中一共有四种访问权限,分别是「public、protected、包访问权限(默认)、private」。如果省略了修饰符,那么默认的访问权限就是「包访问权限」。
这四种权限从「最大权限」到「最小权限」分别是: public
> protected
>包访问权限
>private
权限控制
:对于方法和属性,有4种权限控制符
public
被public修饰的成员对任意一个类都是可用的,任何一个类都可以访问到,通过操作该类的对象随意访问「public」成员private
除了包含这个成员的类之外,所有类都无法访问这个成员,相当于自我封闭,防止其他类改变或删除这个方法protected
在相同的class
内部,同一个包内和其他包的子类中能被访问。要理解「protected」权限,就需要了解「继承」,因为这个权限处理的就是继承相关的概念,继承而来的子类可以访问「public、protected」,缺省(包访问权限)
没有任何修饰符的权限就是「包访问权限」,意味着当前包的所有类都可以访问这个成员,如表中所示,对于本包之外的类,这个成员就变成了「private」,访问不了。
二、继承
1. 好处
- 减少代码的冗余
方便功能上的拓展
一旦
子类A
继承了父类B
之后,子类A
就获取到了B类
中声明的所有属性和方法,但是由于封装上权限的影响,无法调用到父类的部分结构。-
3. 特点
一类父类可以被多个子类继承
-
4. Object类
如果没有显式指明一个类的直接父类,那么此类继承于
Object
类-
5. 方法的重写
特点
:子类可以对继承过来的父类中的方法进行覆盖,实现自己的需求注意
:- 子类重写的方法的方法名和形参列表与父类中被重写的方法的方法名和形参列表相同
- 子类重写方法的权限修饰符不可以小于(大于等于)父类方法的权限修饰符
- 子类不可以重写父类中private的方法
- 假设父类中被重写方法的返回值类型是A类,那么子类中重写方法的返回值类型只能是A类或者是A类的子类
- 如果返回的是基本数据类型,那么返回值类型必须相同
- 子类重写的方法抛出的异常类型不大于父类被重写方法抛出的异常类型。子类抛出的异常类型是父类被重写方法抛出异常的子类
- 不可以重写父类中的静态方法
重写和重载的区别
结果上
:创建子类的对象,就会加载出所有父类中声明的属性过程上
:通过子类构造器创建子类对象的时候,会直接或者间接的调用父类的构造器,进而链式的调用构造器,直到调用到Object
类的构造器,从而加载出父类的所有属性注意
:虽然链式的调用了父类的构造器,但是从始至终都只创建过子类一个对象三、多态
特点
:多态是一种运行时的行为,是一种参数的晚绑定。编译看左边,运行看右边理解
:事物的多态性,一种事物可以有多种形态实现
:父类的引用指向子类的对象。**Person person = new Man();**
但person始终还是Person类的对象使用
:当调用与父类同名同参数的方法的时候,实际调用的是子类中重写后的方法。但是也只能调用子类重写父类的方法
- 运行过程中,内存中实际上是加载了子类特有的属性和方法的,但是由于变量声明的时候是父类类型,导致编译时,只能调用到父类中声明的属性和方法,子类中特有的属性和方法是不能调用的。
- 调用到子类重写的方法是在运行过程中的动态绑定的行为
适用
:多态只适用于方法,而不适用于属性前提
:具有继承关系并且子类有重写父类中定义的方法其他
:
向下转型
- 方法:适用类型强制转换符
- 注意:只能是父类转型为子类。转换的过程中可能会出现类型转换异常
- 个人分析:能不能进行强制类型转换其实要看new的那个类加载的时候有没有加载转换后的类型(大概是子类可以转换成父类,因为父类有的子类中一定也有,但是子类中有的父类不一定有)
instance
:用于判断对象A
是否是类B
的一个实例