多态性
多态性:可以理解为某一事物的多种存在形态;其实就像是人可以有很多名称一样例如:学生,老师,工人……
父类引用指向了子类对象。
子类的对象可以代替父类的对象使用。
书上一些关于多态的思想:在类的继承中,子类在父类的基础上进行扩充和改造,父类拥有的成员子类中都有,因而可以认为子类比父类的功能强,或者说子类的对象应该比父类的对象功能强,因而子类的对象应可以替代父类的对象被使用。
·多态的体现:
父类的引用指向自己的子类对象;
父类的引用可以接收自己的子类对象。
·多态的前提:
要有继承关系,存在覆盖。
·多态的好处:
提高程序的扩展性。
!弊端:
只能使用父类引用访问父类中的成员。
如果想访问子类的特有方法,需要强制将父类的引用转为子类类型。
多态编译的特点: 编译看左边,运行看右边。
多态中成员变量的特点: 编译和运行都看左边。
访问子类中特有的方法是,需先判断是否属于想访问的子类这是后就需要用到(instanceof)运算符
用法:
if([-对象-]instanceof[-子类-])
{ [ 子类 ][ 新对象名 ]=([ 子类 ])对象名;
[ 新对象名 ].[ 子类中的特有方法 ](); } 静态初始化快[类 中 的第四种成员]
Java使用构造方法来对单个对象进行初始化操作。与构造方法作用非常类似的是初始化块,它也可以对对象进行初始化操作。
用法:
{ //初始化快可执行代码 } 或 [修饰符(只有static静态初始化快)]{ //初始化快可执行代码 }
一个类里也可以有多个初始化块;
相同类型的初始化块之间有顺序,前面定义的初始化块先执行,后面定义的初始化块后执行。
具体使用要注意的:
·当创建Java对象时,系统总是先调用该类里定义的初始化块;
·如果一个类里定义了两个普通初始化块,则前面定义的初始化块先执行,后面定义的初始化块后执行。
·初始化块虽然也是Java类里的一种成员,但它没有名字,也就没有标识,因此无法通过类、对象来调用初始化块;
·初始化块只能在创建对象时自动执行而且在执行构造方法之前执行。
·如果多个构造方法里有相同的初始化代码,这些代码无需接受参数,那就可以把他们放在初始化块中定义。 ·创建一个Java对象时,不仅会执行该类的初始化块和构造方法,系统会先执行其父类的初始化块和构造方法。
静态初始化块
如果定义初始化块时使用了static修饰符,则这个初始化块就变成了静态初始化块,也被称为类初始化块。
·静态初始化块是类相关的,系统将在类初始化阶段执行静态初始化块,而不是在创建对象时才执行,因此静态初始块总是比普通初始化块先执行。
·静态初始块属于类的静态成员,用于对类属性执行初始化处理,不能对实例属性进行初始化处理。
·系统在类初始化阶段执行静态初始化时,不仅会执行本类的静态初始化块,还会一直上溯到Object类(如果它包含静态初始化块)。经过这个过程,才完成了对类的初始化过程。
注意:静态初始块和声明静态属性时所指定的初始值都是该类的初始化代码,它们的执行顺序与源程序中排列顺序相同