各位大虾哈,本小虾是个JAVA新手,现在遇到一个问题不是很明白,望解决一下下:
   class A{
         protected double x=22.36;
           }
   class B extends A{
         double x=0.0;
         void g(){
         y=y+100;
         System.out.println(y);
         }
    public static void main(String[] args){
         B b=new B();
         B.y=100;
         B.g();
         A a=new B();
         System.out.println(a.y);
           }
         }
     我知道,上转型在调用被子类继承的方法时,调用的是子类重写的方法,但是上面的例子中变量Y被隐藏了(相当重写了,呵呵,我这么认为的),但是调用的时候怎么是原来的22.36,而不是0.0呢?望解释一下~~~~

解决方案 »

  1.   

    重写是指的方法
    对于普通的方法通过向上转型new 出来的对象调用的是子类中方法,而属性则调用的父类的属性。
    public class 上转型调用A {
    public double x = 1.234;

    public void getA(){
    System.out.println("A");
    }
    }public class 上转型调用B extends 上转型调用A{
    public double x = 0.0;

    public void getA(){
    System.out.println("B");
    }

    public static void main(String[] args){
      上转型调用A  a = new 上转型调用B();
      a.getA();
      System.out.print(a.x);
    }
    }
    输出的是 
    B  
    1.234
    但如果是static方法,情况就跟属性一样了,是无法上转型的
    public class 上转型调用A {
    public double x = 1.234;

    public static void getA(){
    System.out.println("A");
    }
    }
    public class 上转型调用B extends 上转型调用A{
    public double x = 0.0;

    public static void getA(){
    System.out.println("B");
    }

    public static void main(String[] args){
      上转型调用A  a = new 上转型调用B();
      a.getA();
      System.out.print(a.x);
    }
    }
    输出的是 
    A
    1.234我只认识到这个程度