目录
多态性
背景交代:Man类和Women类继承了Person类,且重写了eat和walk方法
变量类型转换的类比
Person p1 = new Man();//向上转型
entertainment方法为Man类独有,不满足多态性条件,不能直接
调用,p2.shopping方法同理。
向下转型为women类对象引用即可调用独有方法
p1是Person类(实体为man类),向下转型为woman类,能通过编
译,但执行时显示类型转化异常,因为没有shopping方法(海波哥,苦啊!)
下例,直接向下转型,编译器都通不过,毕竟两类无直接关系
注意instanceof右边是类名
p1是man类实例,所以也是其父类person类的实例,故会输出“你好”
若想通过p1执行entertainment这一子类独有方法,则需要进行判断后向下转型,不能直接调用子类独有方法
多态性应用场景
形参类型只需要设定为父类对象引用,则可传入父类及其子类的对象,可省略大量方法。
1)
举例
不仅可传入animal还可传入dog和cat,实际执行的方法是子类实例重写父类的方法
子类对象的属性无多态性
子类与父类属性同名,都会加载到内存中,不存在类似方法的重写或覆盖,所以
Animal a = new Dog();
a.id实际的是父类属性id的值,而不是子类(看左边)
多态性练习
构造器的修饰符:四选一
注意注释部分,上半部分表示可替换,,下半部分为解释说明