ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA多态

2019-03-19 11:50:38  阅读:236  来源: 互联网

标签:JAVA void 多态 Cat shout Animal public


在程序设计一个方法时,如果我们希望它能够通用,例如要实现一个动物叫的方法,我们可以在方法中接收一个动物类型的参数,当传入猫类对象时就发出猫叫,传入其他动物类型时就发出其相应的叫声。在同一个方法中,这种由于参数类型不同而导致执行效果不同的现象就是多态。

用一个案例来演示多态的使用:

 1 //定义接口Animal
 2 interface Animal {
 3    void shout();//定义抽象方法
 4 }
 5 //cat类实现Animal接口
 6 class Cat implements Animal{
 7    public void shout(){
 8      System.out.println("喵喵");     
 9     }
10 
11 }
12 class Dog implements Animal{
13    public void shout(){
14       System.out.println("汪汪"); 
15    }
16 }
17 //定义测试类
18 public class Ex_2{
19   public static void main(String[] args){
20       Animal an1 = new Cat();//创建Cat对象使用Animal类型变量an1引用
21       Animal an2 = new Dog();//创建Cat对象使用Animal类型变量an1引用
22       animalShout(an1);
23       animalShout(an2);
24 }
25 public static void animalShout(Animal an){
26     an.shout();
27 }
28 }

这里就涉及到对象的类型转换,在多态的使用中,涉及到将子对象当作父类类型使用(向上转型)或者将父类型当中子类型使用(向下转型)的情况。

向上转型的例子:

Animal an1 = new Cat();//将Cat对象当做父类型

     

通过一个案例来了解下向下转型:

 1 //定义Animal接口
 2 interface Animal{
 3    void shout();
 4 }
 5 //定义Cat类实现Animal
 6 class Cat implements Animal{
 7     public void shout(){
 8        System.out.println("喵喵");
 9    }
10   public void sleep(){
11        System.out.println("呼呼...");
12    }
13 }
14 //定义Dog类实现Animal
15 class Dog implements Animal{
16     public void shout(){
17        System.out.println("汪汪");
18    }
19   public void sleep(){
20        System.out.println("wang...");
21    }
22 }
23 //创建测试类
24 public class Ex_3{
25     public static void main(String[] args){
26         Dog  dog = new  Dog();
27         animalShout(dog);
28    } 
29     public static void animalShout(Animal animal){
30        if(animal instenceof Cat){
31        Cat cat = (Cat)animal;//将Animal对象转换成Cat类型
32        cat.sleep();
33        cat.shout();
34    }
35 else{
36   System.out.println("这不是猫");
37 }
38   }
39 }

 

这个案例中 我们把Animal对象转换成了Cat类型。

Cat cat = (Cat)animal;

多态存在的三个必要条件

一、要有继承;

二、要有重写;

三、 父类引用指向子类对象

多态的好处:

1)可替换性(substitutability):多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

2)可扩充性(extensibility):多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

3)接口性(interface-ability):多 态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和 Sphere为了实现多态,完善或者覆盖这两个接口方法。

4)灵活性(flexibility):它在应用中体现了灵活多样的操作,提高了使用效率。

5)简化性(simplicity):多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

标签:JAVA,void,多态,Cat,shout,Animal,public
来源: https://www.cnblogs.com/qngq/p/10557580.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有