码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA SE 多态的实现机制

时间:2015-10-01 17:51:02      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

  面向对象的三大特征:封装,继承和多态。多态是面向程序设计中代码重用的一个重要机制,它表示当同一操作作用在不同对象时,会有不同的语义。

  Java 多态主要有以下两种表现方式:

  1)方法重载(overload)。重载是指同一类中有多个同名方法,但是这些方法必须在参数列表上加以区分,要么参数个数不同,要么在相同位置上的参数类型不同。

 

  2)方法的覆盖(override)。子类可以覆盖父类的方法。父类的引用不但可以指向其实例对象,也能够指向子类的实例对象。接口的引用变量也可以指向其实现类的实例对象。

而程序的调用方法是在运行期才动态绑定的,就是引用变量所指向的具体实例对象的方法,而不是引用变量的类型中定义的方法。这种动态绑定实现了多态。只有运行时才能够确定具体调用哪个方法。因此通过方法覆盖的实例也称为运行时多态

  注意成员变量是无法实现多态的成员变量的取值取决于定义变量的类型

public class Father {
    public int i=1;
    
    public void a()
    {
        System.out.println("father a");
    }
    
    public void b()
    {
        System.out.println("father b");
    }
}
public class Son extends Father{
    public int i=5;
    
    public void a()
    {
        System.out.println("Son a");
    }
    
    public void b()
    {
        System.out.println("Son b");
    }
    
    public void c()
    {
        System.out.println("Son c");
    }
}
    public static void main(String[] args) {
        Father father=new Son();
        father.a();
        father.b();
        //father.c();   error
        System.out.println(father.i);
        
        
        Son son=(Son)father;     //父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用
        son.c();
        System.out.println(son.i);
      

      //会抛出异常 java.lang.ClassCastException: Father cannot be cast to Son
      //Son son=(Son)new Father();


    }

输出:

Son a
Son b
1
Son c
5

 

JAVA SE 多态的实现机制

标签:

原文地址:http://www.cnblogs.com/maydow/p/4851263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!