java多态的概念与使用方法,java实现多态有几种方法

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: