java多态的概念与使用方法,java实现多态有几种方法
一.定义介绍。多态性III的实施方案。多态性IV的好处。引用式转化向上转化向下转化为什么要转化转化的变态?
目录
00-1010多态性是面向对象继封装和继承之后的第三个特征。在生活中,比如跑步,猫、小狗、大象的跑步方式都不一样。比如再飞的动作,昆虫,鸟和飞机,飞的时候都不一样。可见,同样的行为,通过不同的事物,可以体现为不同的形式。多态性描述了这样一种状态。
00-1010多态: 指的是同一种行为,它有许多不同的表现形式。
一、概述
多态体现的格式:
父类型变量名=新子类对象;变量名。方法名();
指父类类型:子类对象继承的父类类型或实现的父接口类型。
代码如下:
fu f=new Zi();f . method();在多态模式下调用方法时,首先检查方法是否存在于父类中,如果不存在,则编译错误;如果是,则执行子类化后的方法。
代码如下:
定义父类:
公共抽象类动物{公共抽象void eat();}定义子类:
类扩展animal { public void eat(){ system . out . println( eat fish );}}类dog扩展animal { public void eat(){ system . out . println(吃骨头);} }定义测试类:
public class test { public static void main(string[]args){//多态形式,创建对象animal 1=newcat();//调用猫的eat a1 . eat();//多态形式,创建对象Animal a2=new Dog();//所谓的是狗食a2 . eat();}}
00-1010在实际开发过程中,父类类型作为方法的形参,子类对象传递给方法调用方法,更能体现多态性的扩展性和方便性。
定义父类:
公共抽象类动物{公共抽象void eat();}定义子类:
类扩展animal { public void eat(){ system . out . println( eat fish );}}类dog扩展animal { public void eat(){ system . out . println(吃骨头);} }定义测试类:
public class test { public static void main(string[]args){//多态形式,创建对象Cat c=new Cat();狗d=新狗();//调用showCatEat showCatEat(c);//调用showDogEat showDogEat(d);/* *以上两种方法可以用showAnimalEat(Animal a)方法代替,执行效果是一样的*/showAnimalEat(c);显示
AnimalEat(d); } public static void showCatEat (Cat c){ c.eat(); } public static void showDogEat (Dog d){ d.eat(); } public static void showAnimalEat (Animal a){ a.eat(); }}由于多态特性的支持,showAnimalEat方法的Animal类型,是Cat和Dog的父类类型,父类类型接收子类对象,当然可以把Cat对象和Dog对象,传递给方法。当eat方法执行时,多态规定,执行的是子类重写的方法,那么效果自然与showCatEat、showDogEat方法一致,所以showAnimalEat完全可以替代以上两方法。不仅仅是替代,在扩展性方面,无论之后再多的子类出现,我们都不需要编写showXxxEat方法了,直接使用showAnimalEat都可以完成。所以,多态的好处,体现在,可以使程序编写的更简单,并有良好的扩展。
四、引用类型转换
多态的转型分为向上转型与向下转型两种:
向上转型
向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。当父类引用指向一个子类对象时,便是向上转型。
使用格式:
父类类型 变量名 = new 子类类型();如:Animal a = new Cat();
向下转型
向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。
使用格式:
子类类型 变量名 = (子类类型) 父类变量名;如:Cat c =(Cat) a;
为什么要转型
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做向下转型。
转型演示,代码如下:
定义类:
abstract class Animal { abstract void eat();}class Cat extends Animal { public void eat() { System.out.println("吃鱼
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。