**

Java中 多态的理解

**
多态官方定义为: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性

其实,简单点理解可以是: 就是在面对对象时,同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,同样也可理解为对象的多种特性。

多态存在的三个必要条件:

1.要有继承;
2.要有方法的重写;
3.父类引用指向子类对象(对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,只就是动态连接)

对于多态,可以将其总结为:*

①使用父类类型的引用指向子类的对象;
②该引用只能调用父类中定义的方法和变量;
③如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接,动态调用);
④变量不能够被重写(覆盖),“重写”这个概念只针对于方法,如果在子类中“重写”了父类中的变量,那么在编译时会报错;
⑤如果子类继承父类的一个方法后加以重载,则该父类的引用不能使用重载之后的那个方法。

例子:

package test;public class Textduotai {public static void main(String[] args) {// TODO Auto-generated method stub    
/*这时多态就很好的体现了,你想给你的宠物喂食,只需要添加相对应动物类,和食物类的子类,比如你有养了一只乌龟,只需要写一个乌龟类让他继承动物类,和它相对应的food  **说话,你想喂鱼给你的猫吃就只需要调用feed方法,结果你的猫吃到了鱼:程序输出我叫小白,我喜欢吃鱼, */Master master = new Master();master.feedFood(new Cat(), new Fish());}
}//定义动物类,动物有两个成员属性name和age
class Animal{String name;int age;//成员变量的访问器和修改器即get和set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//定义动物两个方法动物都会叫public void animalcay(){System.out.println();}//动物都要吃东西public void eat(){System.out.println();}}//定义猫类并且让猫类继承动物类
class Cat extends Animal{String name;int age;public Cat(){System.out.println("小白");}//父类方法的重写public void animalcay(){System.out.println(" 喵喵叫");}public void eat(){System.out.print("I like fish");}}
//定义狗类,并且让狗类继承动物类的方法
class Dog extends Animal{String name;int age;public Dog(){System.out.println("我叫小黑");}//父类方法的重写public void animalcay(){System.out.println(" 旺旺叫");}public void eat(){System.out.print("我喜欢吃骨头");}
}//定义食物类
class Food{String name;public void showName(){System.out.println();}
}class Fish extends Food{String name;//重写父类方法public void showName(){System.out.println("我喜欢吃鱼");}
}class Bone extends Food{String name;//重写父类方法public void showName(){System.out.println("骨头");} } //定义主人类,比如要给动物喂食class Master {String name ;public Master(){}public Master(String name){this.name  = name;}public void feedFood(Animal an,Food food){System.out.print(name+" ");an.eat();System.out.println("最喜欢食物:");food.showName();}
}

输出结果为:

Java中 多态的理解相关推荐

  1. JAVA中多态的理解

    Java中多态的理解 JAVA中的多态可以简单的理解为一种事物的多种形态,当然多态是在继承的基础上有重写才存在. 标题如何理解一种事物的多种形态? 举个例子,拿人类.男人.女人来说.男人.女人.都分别 ...

  2. java对多态的理解_对于Java中多态的理解

    所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个 ...

  3. 关于java中多态的理解,涉及到内存空间

    其实理解了程序在内存里如何搞,如何玩,是很爽的. 首先简要说明下程序运行时,内存的结构.堆区栈区,常量区,静态方法区和非静态方法区. 1.栈:存放基本类型的变量数据和对象的引用(也就是在new对象时左 ...

  4. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  5. 什么是多态,JAVA 中多态的实现机制

    什么是多态,JAVA 中多态的实现机制 首先声明啊,这里的多态不是生物学和物理学上的多态性,这个是指编程语言中的多态. 官方说明: 多态(英语:polymorphism)指为不同数据类型的实体提供统一 ...

  6. 【转载】谈谈我对Java中CallBack的理解

    谈谈我对Java中CallBack的理解 转载自: http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallB ...

  7. 对于C++中多态的理解

    对于C++中多态的理解 概述 函数的调用方式 静态绑定 动态绑定 动态绑定的条件 多态的用法 C++中多态的实现 参考 概述 OOP或者OOD的概念中,包含有复合composition,委托deleg ...

  8. 谈谈对java中分层的理解_让我们谈谈网页设计中的卡片设计

    谈谈对java中分层的理解 "I want a card", this is the first demand point that the customer said in th ...

  9. 沉淀再出发:关于java中的AQS理解

    沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的 ...

最新文章

  1. Apache Unable to find the wrapper https - did you forget to enable it when you configured PHP?
  2. avascript中的this与函数讲解
  3. java中Volatile修饰符的含义
  4. LeetCode集锦(十) - 第28题 Implement StrStr
  5. grpc框架_分布式RPC框架dubbo、motan、rpcx、gRPC、thrift简介与性能比较
  6. QQ超市模拟排配2D版1.13 (XNA4.0) (修正双格货架移动的一个bug和3-5地图)
  7. Python Django 基于通用视图实现图片的显示功能代码示例
  8. 网站导航颜色停留_做好这几点是建设营销型网站的关键
  9. 非接触物体尺寸形态测量_如何确定接触式和非接触式测量之间的测量技术
  10. Google Hangouts支持使用Firefox WebRTC
  11. redis创建集群报错can‘t connect to node 192.168.163.203
  12. Linux 僵尸进程可以被杀死吗?
  13. sanic set up
  14. 88上的数学题目之二
  15. 《编码的奥秘》读后感
  16. TP-Link 886nV6 刷第三方系统回忆
  17. jQuery-对联广告
  18. VLP-16第一课: Velodyne的工作原理和驱动安装
  19. SylixOS更新记录
  20. Hadoop 文件系统与 COS 之间的数据迁移

热门文章

  1. 【RocketMQ工作原理】消息的生产过程
  2. win10计算机无法睡眠怎么办,Windows10笔记本电脑无法睡眠怎么处理
  3. 外链引入css有哪些方式_引入CSS样式表的方式有哪些?
  4. 如何做一名专业的软件测试工程师
  5. 原来腾讯面试题也不难,面试官:给我说一下你理解的分布式架构?
  6. flat在java中的含义_java – 在flatingBy中使用flatMap的优雅方法
  7. debian linux 硬盘,[Debian] 硬盘安装Debian,
  8. mac的mysql数据库管理_Mac使用MySQL Workbench管理MySQL数据库
  9. a*算法的时间复杂度_算法基础——时间复杂度amp;空间复杂度
  10. null未定义_PHP的isset()、is_null、empty()使用总结