Java多态总结
一、什么叫多态?
例子1:对象多种状态 水:液态 气态 固态
例子2:
--汽车(父类,基类)
----宝马(子类,派生类)
----奥迪(子类,派生类)
----保时捷(子类,派生类)
定义:子类创建对象后,可以指向子类型引用,也可以指向父类型引用。
换言之,可以以子类状态运行,也可以以父类状态状态————多态。
二、多态成员的调用
成员有哪些?非静态全局变量、静态全局变量、全局常量、非静态方法、静态方法、构造方法
1、子类型继承父类型情况:子类 zi=new 子类();
————1.1、父类有,子类没有:
——————子对象继承父对象成员,肯定以父对象的状态运行
————1.2、父类没有,子类有:
——————以子对象为准
————1.3、父类有,子类也有:
——————————1.3.1、子父类存在相同的非静态方法时:
——————————————————使用子类对象方法(子类重写/覆盖父类方法)。右边为准
——————————1.3.2、子父类存在相同的非静态全局变量时:
——————————————————使用子对象变量 右边为准
——————————1.3.3、子父类存在相同的静态方法时:
——————————————————使用子对象静态方法。右边为准
——————————1.3.4、子父类存在相同的静态全局变量时:
——————————————————使用子对象静态变量 右边为准
2、子类型转型到父类型情况:父类 fu=new 子类();
————1.1、父类有,子类没有:
——————子对象继承父对象成员,肯定以父对象的状态运行
————1.2、父类没有,子类有:
——————父对象不能操作子对象中的成员
————1.3、父类有,子类也有:
——————————1.3.1、子父类存在相同的非静态方法时:
——————————————————使用子类对象方法。右边为准
——————————1.3.2、子父类存在相同的非静态全局变量时:
——————————————————使用子对象变量 右边为准
——————————1.3.3、子父类存在相同的静态方法时:
——————————————————使用父类对象静态方法。 以左边为准
——————————1.3.4、子父类存在相同的静态全局变量时:
——————————————————使用父对象静态变量 以左边为准
三、多态总结:
2.1、子类 zi=new 子类();
----左边=右边
————调用非静态函数/变量:以右边为准(非静态成员属于对象,被继承,谁创造对象,就调用谁的成员)
————调用静态函数/变量:以左边为准(静态成员属于类,不能被继承,谁声明变量,就调用谁的静态成员)
2.2、父类 fu=new 子类();
----左边=右边
————调用非静态函数/变量:以右边为准(非静态成员属于对象,被继承,谁创造对象,就调用谁的成员)
————调用静态函数/变量:以左边为准(静态成员属于类,不能被继承,谁声明变量,就调用谁的静态成员)
2.3、多态成员调用总结:
————类型 变量=new 类型();
----左边=右边
————调用非静态函数/变量:以右边为准(非静态成员属于对象,被继承,谁创造对象,就调用谁的成员)
————调用静态函数/变量:以左边为准(静态成员属于类,不能被继承,声明什么类型变量,就调用什么类型的静态成员)
四、面向对象三大基本特征:
1、封装 :
——1.1、数据成员或行为以class 进行封装,扩展的方法和行为以interface进行封装
————接口主要用来拓展类的功能,弥补java中单继承的缺点
——1.2、类类型内存初始化: 静态代码块 static{},初始化类型时会被调用
——1.3、对象创建:
————1.3.1、先调用(如果有)无参代码块{},然后调用构造函数创建对象new 类型();
————1.3.2、this指向对象自身,super指向父类对象
2、继承:
——2.1、非静态成员属于对象,可以继承。子父类成员相同,子类覆盖从父类继承的成员(以子类为准)。
——————静态成员属于类型自身,不能继承
——2.2、调用子类构造方法创建子对象时,先去调用父类构造函数,先创建父类对象。
——————子类构造函数的第一行,默认调用super.父类型(),父类型的无参构造函数。
——2.3、子对象构造函数重载使用this关键字。this()和super()不能同时出现在构造函数的第一行
——2.4、继承根本目的:
————————减少冗余代码
3、多态:
可以以多种状态运行。使程序更加灵活。尽可能贴近现实世界的思维去构建丰富灵活的代码。
具体总结见一。
浙公网安备 33010602011771号