Java中实现多态的机制

Java中实现多态的机制靠的是父类或者接口定义的引用变量可以指向子类或者具体的实现类的实例对象,而程序调的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

具体来说,就是父类A有一个方法function(),子类B,C分别继承A并且重写function(),当创建一个对象A b = new B(); b.function()就调用B的funciotn,假如你new C(),那调用的就是C重写的function。怎么判断使用那个类的function就是动态绑定,这个现象就是多态。

范例代码:

  1. public class Test0718_Polymorphism2 {
  2. public static void main(String[] args) {
  3. Person person1 = new Person();
  4. Person person2 = new Man();
  5. Person person3 = new Woman();
  6.  
  7. person1.walk();
  8. person2.walk();
  9. person3.walk();
  10.  
  11. ((Man) person2).Moneyyy();
  12. // ((Woman)person2).Shopping();
  13. ((Woman) person3).Shopping();
  14. person1.nameString = "xm";
  15. person1.age = 17;
  16. person2.nameString = "男人姓名";
  17. person2.age = 18;
  18. m1(person1);
  19. m1(person2);
  20. m1(person3);
  21. // Man man = new Man();
  22. // Woman woman = (Woman)man;
  23. }
  24.  
  25. public static void m1(Person person) {
  26. String iString = person.getInfo();
  27. System.out.println(iString);
  28. }
  29. }
  30.  
  31. class Person{
  32. String nameString;
  33. int age;
  34. public void walk() {
  35. System.out.println("走路。。。");
  36. }
  37. public static void pName() {
  38. System.out.println("姓名。。");
  39. }
  40. public String getInfo() {
  41. // TODO Auto-generated method stub
  42. return "Name:"+nameString+"\tAge:"+age;
  43. }
  44. }
  45. class Man extends Person{
  46. int money;
  47. int age;
  48. @Override
  49. public void walk() {
  50. System.out.println("男人走路。。。");
  51. }
  52. public static void pName() {
  53. System.out.println("男人姓名。。");
  54. }
  55. public void Moneyyy() {
  56. System.out.println("男人赚钱。。。");
  57. }
  58. @Override
  59. public String getInfo() {
  60. // TODO Auto-generated method stub
  61. return "Name:"+nameString+"\tAge:"+age+"\tMoney:"+money;
  62. }
  63. }
  64. class Woman extends Person{
  65. int hehe;
  66. @Override
  67. public void walk() {
  68. System.out.println("女人走路。。。");
  69. }
  70. @Override
  71. public String getInfo() {
  72. // TODO Auto-generated method stub
  73. return "Name:"+nameString+"\tAge:"+age+"\tHehe:"+hehe;
  74. }
  75. public void Shopping() {
  76. System.out.println("女人购物。。");
  77. }
  78. }

执行结果:

---------- 运行 ----------

走路。。。

男人走路。。。

女人走路。。。

男人赚钱。。。

女人购物。。

Name:xm Age:17

Name:男人姓名 Age:0
Money:0

Name:null Age:0
Hehe:0





输出完成 (耗时 0 秒) - 正常终止

Java学习笔记——多态性Polymorphism的更多相关文章

  1. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  2. java学习笔记07--日期操作类

    java学习笔记07--日期操作类   一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...

  3. java学习笔记08--泛型

    java学习笔记08--泛型 泛型可以解决数据类型的安全性问题,它主要的原理,是在类声明的时候通过一个标识标识类中某个属性的类型或者是某个方法的返回值及参数类型.这样在类声明或实例化的时候只要指定好需 ...

  4. java学习笔记8--接口总结

    接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3- ...

  5. Java学习笔记之---面向对象

    Java学习笔记之---面向对象 (一)封装 (1)封装的优点 良好的封装能够减少耦合. 类内部的结构可以自由修改. 可以对成员变量进行更精确的控制. 隐藏信息,实现细节. (2)实现封装的步骤 1. ...

  6. java学习笔记之OOP(二)

    java学习笔记二.面向对象[OOP]Object Oriented Programming 一.三大特性: 1.封装:隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用 ...

  7. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  8. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  9. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

随机推荐

  1. 深入浅出Spring(四) Spring实例分析

    上次的博文中 深入浅出Spring(二) IoC详解 和 深入浅出Spring(三) AOP详解中,我们分别介绍了一下Spring框架的两个核心一个是IoC,一个是AOP.接下来我们来做一个Sprin ...

  2. JAVA 开发实例 一 移动的小球

    package com.java.move; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; i ...

  3. IIS7下.NET4.0 网站UrlRewriter.dll重写无后缀路径 失效

    解决方法: 1.添加通配符脚本映射,选择:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 2.找到和网站相对的连接池,选择 ...

  4. Data Binding in WPF

    http://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S1   Data Binding in WPF John Papa Code downl ...

  5. JDBC Connection

    [ http://shift-alt-ctrl.iteye.com/blog/1967020]   关于JDBC中关于Connection的两个疑问:   1.Connection实例是线程安全的吗? ...

  6. 本地存储(cookie&sessionStorage&localStorage)

    好文章,最全面.就查它吧:https://segmentfault.com/a/1190000004556040 1.DOM存储:https://developer.mozilla.org/zh-CN ...

  7. jquery 禁止页面滚动-移动端

    禁止 window.ontouchmove=function(e){        e.preventDefault && e.preventDefault();        e.r ...

  8. Ehcache(08)——可阻塞的Cache——BlockingCache

    http://haohaoxuexi.iteye.com/blog/2119737 可阻塞的Cache—BlockingCache 在上一节我们提到了显示使用Ehcache锁的问题,其实我们还可以隐式 ...

  9. cocos2dx 兼容性

    报错: Caused by: java.lang.UnsatisfiedLinkError: Couldn't load cocos2dcpp: findLibrary returned null 因 ...

  10. 学会自己写jQuery插件(一)---基础

    第一步:定义插件 $(function() { $.fn.插件名称 = function(options) { var defaults = { Event : "click", ...