直接调用a 或者是f()方法是子类的变量和方法,要是 调用super.a或 super.f()这是父类的变量和方法,你可以将关键字super想象成是一个父类的对象。

解决方案 »

  1.   

    调用覆写过的,即子类调用自己的属性,调用父类的用super
      

  2.   

    子类中的成员变量可以进行变量隐藏,然后在子类的方法中可以直接使用了。如果想在子类中用父类的同一个变量,则需要加SUPER.变量名。
      

  3.   

    子类  class class1 extends parent{
               private int a=3;
                 f(){
      
                   //用this.a代表class1的a变量
                      //用super.a代表parent的a变量
               }
         }
    子类  class class2 extends parent{
               private int a=3;
               f(){
      
                   //用this.a代表class2的a变量
                      //用super.a代表parent的a变量
               }
    }
      

  4.   

    楼主如果不想每个子类都重写f()方法,可以把a作为一个参数传入,子类调用的时候传入正确的a,如果想调用父类的a,直接this.a就可以获得。
      

  5.   


    这样写必须把父类的a变量设为pubic或prtected,否则子类无法直接用super.a访问父类的a,但是把变量设为pubic违背了封装性 
      

  6.   

    public class SuperClass { public static String a;
    public SuperClass(String a){
    this.a = a+"b";
    setA(a+"2b");
    if(this instanceof ChildClass){
    //System.out.println("b");
    }else{
    //System.out.println(this.getClass().getName());
    }
    }

    public  String getA(){
    System.out.println("super getA");
    return a;
    }

    public void setA(String a){
    System.out.println("super setA");
    this.a = a;
    }
    }
    public class ChildClass extends SuperClass{ public  static String a ;
    public ChildClass(String a){
    super(a);
    //this.a = a;
    }

    public static void main(String[] args){
    SuperClass a = new ChildClass("a");
    ChildClass b = (ChildClass)a;
    System.out.println(ChildClass.a);
    System.out.println(SuperClass.a);
    }

    public  String getA(){
    System.out.println("child getA");
    return a;
    }

    public void setA(String a){
    System.out.println("child setA");
    this.a = a;
    }
    }好好想想这个结果,java的父类是不能调用子类的成员变量的。