java中的多态分为两种
1方法的多态(严格意义上这不算,但为了帮助新手理解多态,此处归为多态)
方法的多态体现为,同一个类中有同名的方法,但是方法的参数类型,或参数个数不同,在实际调用的时候,会根据参数类型或参数个数找到对应的方法,这其实就是java方法的重载。
2引用多态
(1)多态的前提
A 要有继承关系
B要有方法重写
C要有父类引用指向子类
多态的代码体现
小插曲:
虽然Fu类的静态方法 run() 只能被Zi类的静态方法 run() 重写,但这实际上根本不叫重写,子类的静态方法,不会覆盖父类的静态方法,因为静态方法是属于类的,而不是属于对象的。
(2) 多态中的成员访问特点
编写一个测试demo
以上代码运行之后依次会输出 35 zi 我跑的快
如果用指向父类的引用 f 访问了 Fu 类中没有的 成员变量 成员方法 静态方法 在编译阶段 都将报错
而我们发现,父类的成员方法在被子类重写之后,虽然 f 是指向 Fu 类的引用,但是访问的却是 Zi 类
中对应的 show() 方法,所以总结如下:
成员变量:
编译看左边,访问看左边
构造方法:
创建子类对象的时候,会访问父类的构造方法,对父类的数据进行初始化
成员方法:
编译看左边,访问看右边(若子类对父类的方法进行重写,则会把父类中对应的方法覆盖,会访问到子类的方法)
静态方法:
编译看左边,访问看左边