Scott@JAVA

Java, 一杯浓浓的咖啡伴你到深夜

运行时多态

 

class  A  {
    
int  i  =   1 ;

    
char  f()  {
        
return   ' A ' ;
    }


    
static   char  g()  {
        
return   ' A ' ;
    }

}


class  B  extends  A  {
    
int  i  =   2 ;                    // 变量重名

    
char  f()  {                    // 方法重写
         return   ' B ' ;
    }


    
static   char  g()  {            // 这种重写不具有多态性。多态性指实例方法
         return   ' B ' ;
    }

}


public   class  Test  {
    
public   static   void  main(String[] args)  {
        B b 
=   new  B();
        System.out.println(b.i);
        System.out.println(b.f());
        System.out.println(b.g());
        System.out.println(B.g());
        A a 
=  b;                   // 子类对象当作父类对象使用
        System.out.println(a.i);
        System.out.println(a.f());
        System.out.println(a.g());
        System.out.println(A.g());
    }

}



程序运行结果:
2
B
B
B
1
B
A
A

程序分析:在该示例程序中,变量i产生数据成员变量隐藏;实例方法f()是方法重写,对实例方法的重写会产生运行时多态性。static方法g()也是方法重写,但这种方法重写不具有运行时多态的特征,多态特征是针对实例方法而言。因此当子类对象作为父类对象使用时,在输出结果中看到,只有f()发生了运行时多态。

posted on 2007-01-23 11:20 Scott@JAVA 阅读(414) 评论(0)  编辑  收藏 所属分类: Jave SE 6


只有注册用户登录后才能发表评论。


网站导航: