面向对象三大特征:封装性、继承性、多态性。
extends继承后者implements实现,是多态性的前提。
代码当中体现多态性,其实就是一句话,父类引用指向子类对象。
格式:
父类名称 对象名 = new 子类名称();
或者:
接口名称 对象名 = new 实现类名称();
左父右子就是多态
public class Demo01Multi {
public static void main(String[] args) {
//使用多态的写法
//左侧父类的引用,指向了右侧子类的对象
//成员方法new的是谁,就用谁的方法
Fu obj = new Zi();
obj.method();
obj.methodFu();
}
}
在多态的代码中:
成员方法的访问规则是:
看new的是谁,就优先用谁,没有则向上找。
访问成员变量的两种方式:
1.直接通过对象名称访问成员变量,看等号左边是谁,优先用谁,没有则向上找
2.间接通过成员方法访问成员变量,看该方法属于谁,优先用谁,没有则向上找
口诀:编译看左边,运行看右边
对比一下:
成员变量:编译看左边,运行还看左边。
成员方法:编译看左边,运行看右边。
public class Demo02MultiMethod {
public static void main(String[] args) {
Fu obj = new Zi();//多态
obj.method();//父子类都有,优先用子
obj.methodFu();//子类没有,父类有,向上找到父类。
//编译看左边,左边是Fu,Fu当中没有methodZi方法,所以编译报错
// obj.methodZi();//错误写法
}
}
使用多态的好处
假设你是一个老板,手下有员工类(父类),员工包括讲师和助教(子类)
如果不用多态之用子类,写法是
Teacher one = new Teacher();
one.work;//讲课
Assistant two = new Assistant();
two.work;//辅导
对于老板唯一要做的是就是调用work方法,其他的功能不关心。
如果使用多态就是:
Employee one = new Teacher();
one.work();//讲课
Employee two = new Assistant();
two.work();//辅导