Java中的多态(一)

多态:事物存在的多种体现形态;
 1.多态的基本体现: 
父类的引用指向了自己的子类对象eg: Animal c = new cat();
父类的引用也可以接受自己的子类对象。 
 2.多态的前提:
必须是类与类之间有继承或实现关系,
通常存在覆盖,但体现多态性的覆盖代码必须和父类中的代码功能一致
3.多态的好处:
多态的出现提高了程序的扩展性;
找到对象的共同所属类型,通过操作所有类型;简化对象的操作类型;
4.多态的弊端:
但是只能使用父类的引用访问父类中的成员;
5.多态的转型
        Animal a = new Cat();类型提升,向上转型,把cat这个类型转换到动物的这种类型!
        如果想要调用Cat的特有类型时,该如何操作:此时Cat类型已经向上转型为Animal,
        此时强制类型转换 :cat C = (Cat)a;叫做向下转型,将本来是父类Animal 类型的a转换成子类,转换的结果是子类对象
但是不能强制将Animal转换成Cat:
 不能将父类对象转换成子类类型;能转换的是父类引用指向自己的子类对象时,该引用可以被提升,也可以被强制转换

 规律:多态自始至终都是子类对象在做着变化;

 instanceof关键字,判断是不是这个对象是不是这个类型的;

 eg a instanceof cat ,判断a这个对象是不是指向cat这个类

6.多态的规律

1,成员变量。

         编译时:参考引用型变量所属的类中的是否有调用的成员变量,有,编译通过,没有,编译失败。

         运行时:参考引用型变量所属的类中的是否有调用的成员变量,并运行该所属类中的成员变量。

         简单说:编译和运行都参考等号的左边。

2,成员函数(非静态)。

         编译时:参考引用型变量所属的类中的是否有调用的函数,有,编译通过,没有,编译失败。也就是说对象调用的方法必须是父类的方法。

         运行时:参考的是对象所属的类中是否有调用的函数,如果该函数是父类特有的,那就调用父类的方法,如果是子类特有的,

                         那就调用子类

         简单说:编译看左边,运行看右边。

         因为成员函数存在覆盖特性。

3,静态函数。

                   编译时:参考引用型变量所属的类中的是否有调用的静态方法。

                   运行时:参考引用型变量所属的类中的是否有调用的静态方法。

                   简单说,编译和运行都看左边。

                   个人认为静态的方法也好,静态成员变量也好,在多态中没有任何意义,因为静态的成员在优先于对象,他属于这个类,

                   而继承的关系在new对象的时候才确立的,所以静态成员跟多态没有任何关系,所以什么引用就调用什么方法,

                   这种调用静态成员的方法当然也不是标准的,

                   其实对于静态方法,是不需要对象的。直接用类名调用即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值