有人告诉我:关于继承: 
1.method可以覆盖,动态绑定 
2.fields不能覆盖,可以被隐藏 
3.static的不能被覆盖.但是:
我下面的程序: static 的field 和  method 都可以被覆盖:
 class A
{
    public static int a=3;
    public static void m1(){System.out.println("AAAA");}
}
 public class B extends A
{
public static int a=8;
public static void m1(){System.out.println("BBBB");}

public static void main(String args[])
{
B xx=new B();
System.out.println("a="+xx.a);
xx.m1();
}
}

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【sure2003】截止到2008-07-26 10:14:53的历史汇总数据(不包括此帖):
    发帖的总数量:267                      发帖的总分数:11023                    每贴平均分数:41                       
    回帖的总数量:230                      得分贴总数量:7                        回帖的得分率:3%                       
    结贴的总数量:261                      结贴的总分数:10833                    
    无满意结贴数:2                        无满意结贴分:50                       
    未结的帖子数:6                        未结的总分数:190                      
    结贴的百分比:97.75 %               结分的百分比:98.28 %                  
    无满意结贴率:0.77  %               无满意结分率:0.46  %                  
    值得尊敬
      

  2.   

    这个是在2个代码段里面的static,属于局部static,不是同一个static,所以可以变
      

  3.   

    楼主的例子倒是可以,不过你这里明显就是B调用B的方法,要测试多态应该使用父类。
    class A
    {
        public static int a=3;
        public static void m1(){System.out.println("AAAA");}
    }
     public class B extends A
    {
        public static int a=8;
        public static void m1(){System.out.println("BBBB");}
        
        public static void main(String args[])
        {
            A xx=new B();
            System.out.println("a="+xx.a);
            xx.m1();        
        }    
    }这样你就可以看出结果了,输出都是A类中的值。说明了static不具有多态的特点,只能被隐藏。
      

  4.   

    static的方法可以覆盖,m1()可以被覆盖,static的成员则被隐藏了,也就是a被隐藏了。
     public class B extends A
    {
        public static int a=8;//
        public static void m1(){System.out.println(a);}//可以把这两个分别注释掉看看。
        
        public static void main(String args[])
        {
            A yy =new A();
            B xx=new B();        
            System.out.println("yy.a="+yy.a);//3
            System.out.println("xx.a="+xx.a);//8        
            yy.m1();//结果3
            xx.m1();//结果8        
        }    
    }
      class A
    {
        public static int a=3;
        public static void m1(){System.out.println(a);}
    }
      

  5.   

    Java code class A
    {
        public static int a=3;
        public static void m1(){System.out.println("AAAA");}
    }
     public class B extends A
    {
        public static int a=8;
        public static void m1(){System.out.println("BBBB");}
        
        public static void main(String args[])
        {
            B xx=new B();
            System.out.println("a="+xx.a);
            xx.m1();        
        }    
    }JAVA虚拟机在执行XX.m1()时,调用的是b类的m1(),所以可见父类的方法被子类隐藏,如果,在运用够在函数的时候,A xx = new B();这样父类的方法就不会被子类隐藏!
     
     
     
      

  6.   


     class A
    {
        public static int a=3;
        public static void m1(){System.out.println("AAAA");}
    }
     public class B extends A
    {
        public static int a=8;
        public  void m1(){System.out.println("BBBB");}//你这里改下,运行一下就知道不能覆盖了!!!你加上static 就是另外
                                                               //一个方法了
        
        public static void main(String args[])
        {
            A xx=new B();
            System.out.println("a="+xx.a);
            xx.m1();        
        }    
    }
      

  7.   

    好吧,我可能错了,static不能被覆盖
      

  8.   


    public static void main(String args[])
        {
            B xx=new B();
            System.out.println("a="+xx.a);
            xx.m1();        
        }  这里XX和A有关系么?
      

  9.   

    因为static是类属性,不是对象属性,所以不存在多态
      

  10.   

    class A1
    {
        public  int a=5;
    }
    class B1 extends A1
    {
        public  int a=8;
        void print(){
            System.out.println(super.a);
            System.out.println(a);
        }
    }
    class TestStatic
    {
        public static void main(String args[])
        {
            new B1().print();
        }
    }这里没有静态,怎么也出现隐藏这回事啊????????????
      

  11.   


    fields不能覆盖,可以被隐藏,这跟static 没有关系
      

  12.   

    //注意代码格式
    //静态成员不能被覆盖class A
    {
    public static int a = 3; public static void m1()
    {
    System.out.println("AAAA");
    }}class B extends A
    {
    public static int a = 8; public static void m1()
    {
    System.out.println("BBBB");
    } public static void main(String args[])
    {
    B xx = new B();
    System.out.println("a=" + xx.a);
    xx.m1();
    A yy = new B();
    System.out.println("a=" + yy.a);  //看看打印什么
    yy.m1();  //看看打印什么
    }}