理解Java多态

转载 2007年09月28日 16:49:00
在Java中,谈论多态就是在讨论方法调用的绑定,绑定就是将一个方法调用同一个方法主体关联起来。在C语言中,方法(在C中称为函数)的绑定是由编译器来实现的,在英文中称为early binding(前期绑定),因此,大家自然就会想到相对应的late binding(后期绑定),这在Java中通常叫做run-time binding(运行时绑定),我个人觉得这样称呼更贴切,运行时绑定的目的就是在代码运行的时候能够判断对象的类型。通过一个简单的例子说明:

/**

 * 定义一个基类

 */

public Class Parents {

  public void print() {

    System.out.println(“parents”);

}

}

/**

 * 定义两个派生类

 */

public Class Father extends Parents {

  public void print() {

    System.out.println(“father”);

}

}

public Class Mother extends Parents {

  public void print() {

    System.out.println(“mother”);

}

}

/**

 * 测试输出结果的类

 */

public Class Test {

  public void find(Parents p) {

    p.print();

}

public static void main(String[] args) {

  Test t = new Test();

  Father f = new Father();

  Mother m = new Mother();

  t.find(f);

  t.find(m);

}

}

最后的输出结果分别是father和mother,将派生类的引用传给基类的引用,然后调用重写方法,基类的引用之所以能够找到应该调用那个派生类的方法,就是因为程序在运行时进行了绑定。

学过Java基础的人都能很容易理解上面的代码和多态的原理,但是仍有一些关键的地方需要注意的,算是自己对多态的一个小结:

1.        Java中除了static和final方法外,其他所有的方法都是运行时绑定的。在我另外一篇文章中说到private方法都被隐式指定为final的,因此final的方法不会在运行时绑定。当在派生类中重写基类中static、final、或private方法时,实质上是创建了一个新的方法。

2.在派生类中,对于基类中的private方法,最好采用不同的名字。

3.包含抽象方法的类叫做抽象类。注意定义里面包含这样的意思,只要类中包含一个抽象方法,该类就是抽象类。抽象类在派生中就是作为基类的角色,为不同的子类提供通用的接口。

4.对象清理的顺序和创建的顺序相反,当然前提是自己想手动清理对象,因为大家都知道Java垃圾回收器。

5.在基类的构造方法中小心调用基类中被重写的方法,这里涉及到对象初始化顺序。

6.构造方法是被隐式声明为static方法。

7.用继承表达行为间的差异,用字段表达状态上的变化。 (继承与组合)
 
 

Java多态性理解,好处及精典实例

核心: 1、多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编译时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到...
  • Jian_Yun_Rui
  • Jian_Yun_Rui
  • 2016年10月26日 20:12
  • 9414

java中的对于多态的理解

面向对象:      类:具体的对象抽象而来,可以抽象的表示一类具有相同特征和行为的对象      对象:是由类的实例化而来,对象是类的一个实例 java中关于多态的理解 打个比方 父...
  • woshiermingerming
  • woshiermingerming
  • 2016年08月26日 08:29
  • 7106

[java面试]关于多态性的理解

运行时多态性是面向对象程序设计代码重用的一个最强大机制,Java多态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法...
  • kuaisuzhuceh
  • kuaisuzhuceh
  • 2015年07月02日 14:28
  • 1647

java提高篇(三)-----理解java的三大特性之多态

面向对象编程有三大特性:封装、继承、多态。        封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据。对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访...
  • chenssy
  • chenssy
  • 2013年10月16日 19:44
  • 57015

java中多态的经典问题分析

Questionpackage demo;/** * Created by zwj on 2016/3/26. */ class A { public String show(D obj)...
  • zhangwj0101
  • zhangwj0101
  • 2016年03月26日 20:14
  • 973

理解java多态的面试题

class A{ public String show(D obj){ return ("A and D"); } public String show...
  • Simon_901
  • Simon_901
  • 2014年05月05日 21:58
  • 3164

Java 多态 的理解

民国初年 山西阳泉 有个婆婆很会过日子,她有五个儿媳妇都不会过日子,儿媳妇要向婆婆学习过日子,婆婆说你们要继承我们家过日子的传统,先磕个头extends一下。婆婆说我过日子十个字:“柴米油盐酱醋茶啪啪...
  • txl816
  • txl816
  • 2016年09月09日 16:31
  • 2282

Java多态性理解

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

Java多态性理解

Java中多态性的实现什么是多态面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 多态的定义:指允许不同类的对象对同一...
  • daimaxiaozi
  • daimaxiaozi
  • 2017年12月24日 18:17
  • 68

Java中的多态的详细讲解

多态:同一个符号在不同语义环境下具有不同的解释   1. int a = 1+ 2; String s = "abc" + "def"; // +: 在整型中两个数相加,...
  • lin062854
  • lin062854
  • 2013年07月16日 21:56
  • 20109
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解Java多态
举报原因:
原因补充:

(最多只允许输入30个字)