最近学习Java里面的多态下面是个人的整理:

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

  对于多态,可以总结它为:
  一、使用父类类型的引用指向子类的对象;
  二、该引用只能调用父类中定义的方法和变量;
  三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)
  四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。
  五、如果继承的子类继承父类的的一个方法后加以重载,则该父类的引用不能使用重载之后的那个方法。


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中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  3. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

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

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

  5. 从虚拟机指令执行的角度分析JAVA中多态的实现原理

    从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...

  6. Java 中多态的实现(下)

    Java 中多态的另一个语法实现是重写.重载是通过静态分派实现的,重写则是通过动态分派实现的. 在学习动态分派之前,需要对虚拟机的知识有一个初步的了解. 虚拟机运行时数据区 运行 Java 程序时,虚 ...

  7. 谈谈我对Java中CallBack的理解

    谈谈我对Java中CallBack的理解 http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallBack是回 ...

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

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

  9. Java中hashcode的理解

    Java中hashcode的理解 原文链接http://blog.csdn.net/chinayuan/article/details/3345559 怎样理解hashCode的作用: 以 java. ...

随机推荐

  1. 201521123048 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 1.多态:使用单一接口操作多种类型的对象. 2.private修饰属性,public修饰方法 ...

  2. 201521123022 《Java程序设计》 第十一周学习总结

    1.本章学习总结 2.书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问 Q1.1 除了使用synchronized修饰方法实现互斥同步访问,还 ...

  3. 201521123119《Java程序设计》第11周学习总结

    1. 本周学习总结 Q1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 Q1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问 ...

  4. 通过SDK和API获取阿里云RDS的监控数据

    阿里云的RDS自带的监控系统获取数据不怎么直观,想要通过API获取数据通过zabbix显示,因为网上资料缺乏和其他一些原因,获取API签名很困难,但使用阿里云的SDK可以完美避开获取签名的步骤. 阿里 ...

  5. Struts2标签:checkboxlist

    参考自博文:http://www.blogjava.net/koradji/articles/307399.html 语法: <s:checkboxlist name="" ...

  6. .NET Core 使用RabbitMQ

    RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之间的 ...

  7. [js高手之路] 设计模式系列课程 - 迭代器(1)

    迭代器是指通过一种形式依次遍历数组,对象,或者类数组结构中的每个元素. 常见的有jquery中的each方法, ES5自带的forEach方法. 下面我们就来自定义一个类似jquery或者ES5的迭代 ...

  8. Microsoft Visual Studio调试监视器(MSVSMON.EXE)未能启动

    在启动VS2010项目时,遇到如图所示"Microsoft Visual Studio调试监视器(MSVSMON.EXE)未能启动"的问题. 原因是VS2010安装路径(我的是D: ...

  9. iOS 获取设备信息,mac地址,IP地址,设备名称

    #import "DeviceInfoUtil.h" #import "GlobleData.h" #import "sys/utsname.h&qu ...

  10. 自定义流程gooflow2.0+自定义表单

    一.功能简介 gooflow功能清单1.自定义流程绘制2.自定义属性添加3.支持3种步骤类型普通审批步骤自动决策步骤手动决策步骤 4.决策方式(支持js决策,sql语句决策) 5.审批人员参与方式,可 ...