用这种思路好像走不通。因为,在源程序编译后,print()方法里的变量已经和"in Base"这个常量关联起来了。

解决方案 »

  1.   

    你这个问题看能不能这样
    你在子类写一个同名变量,父类的方法不重写,然后在子类调用时把这个同名变量作为参数传进这个方法
    例如:
    public class BaseClass {
      public String field1 = "in Base";
      public void print(String str) {
        System.out.println(str);
      }  BaseClass() {}
    }public class DerivedClass extends BaseClass{
      public String field1 = "in Derived";
      
      public static void main(String args[]) {
        DerivedClass obj = new DerivedClass();
        super.print(this.field1);
      }
    }
      

  2.   

    不太知道,去了解一下java的命名空间。
      

  3.   

    当然可以行得通了。
    public class BaseClass {
      public String field1 ;
      public void print() {
        System.out.println(field1);
      }  BaseClass() {
        field1 = "in base.";  //在构造方法中初始化
      }
    }public class DerivedClass {
      //不用重新定义field1。自动继承父类的field1
      DerivedClass(){
         field1 = "Derivaed class";
      }
      public static void main(String args[]) {
        BaseClass obj = new DerivedClass();
        obj.print();
      }
    }
      

  4.   

    思路不通没关系,大虾们有没有什么殊途同归的思路呢?我知道父类写一个
    public String getField1() { return this.field1; }
    子类也写一个一模一样的,
    然后在父类的print里写
    System.out.println(this.getField1());就可以得到正确结果。
    我看了java的语言规范,后面这样结果正确,是因为对method的“后期绑定”,现在问题是,这样写这个方法的代码完全一抹一样,我还要把它考来考去,太不优美了!
      

  5.   

    呵呵,忘了写extends了。public class BaseClass {
      public String field1 ;
      public void print() {
        System.out.println(field1);
      }  BaseClass() {
        field1 = "in base.";  //在构造方法中初始化
      }
    }public class DerivedClass extends BaseClass{
      //不用重新定义field1。自动继承父类的field1
      DerivedClass(){
         field1 = "Derivaed class";
      }
      public static void main(String args[]) {
        BaseClass obj = new DerivedClass();
        obj.print();
      }
    }