怎么理解JAVA中的多态性

来源:百度知道 编辑:UC知道 时间:2024/05/13 07:46:46
我是初学者,答案越详细越好

在这里,猫是一个具体存在,基本无法再细分的东东,所以需要用一个类来描述、来封装:
public class Cat extends Animal{
// ........
}
动物呢:
public abstract class Animal{
//........
}
现在我需要一个(量词用什么好?条?只?枚?)动物,我给你一只猫没问题吧(猫就是动物啊)
Animal a = new Cat();
这就是多态的简单理解。当然,作为三大特性之一,这里说到的东西相当的肤浅。。。

  一、基本概念

  多态性:发送消息给某个对象,让该对象自行决定响应何种行为。
  通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。

  java 的这种机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。

  1. 如果a是类A的一个引用,那么,a可以指向类A的一个实例,或者说指向类A的一个子类。
  2. 如果a是接口A的一个引用,那么,a必须指向实现了接口A的一个类的实例。

  二、Java多态性实现机制

  SUN目前的JVM实现机制,类实例的引用就是指向一个句柄(handle)的指针,这个句柄是一对指针:
  一个指针指向一张表格,实际上这个表格也有两个指针(一个指针指向一个包含了对象的方法表,另外一个指向类对象,表明该对象所属的类型);
  另一个指针指向一块从java堆中为分配出来内存空间。

  The Java Virtual Machine does not require any particular internal structure for objects. In Sun 's current implementation of the Java