class Person {
     String name;
     int age;
    public void setName(String name) {this.name = name;}
    public void setAge(int age) {this.age=age;}
    public String getName() {return name;}
    public int getAge() {return age;}
    public String getInfo() {
return "Name: "+ name + "\n" +"age:"+ age;

    }
}
class Student extends Person {
    private String school;
    public String getSchool() {return school;}
    public void setSchool(String school)
    {this.school = school;}
    public String getInfo() {
return "Name: "+ name +"\n" +"age: "+age
+ "\n" +"school: "+getSchool();
    }}
public class TestOverWrite {
    public static void main (String args[]) {
Student student = new Student();
Person person = new Person();
person.setName("none");
person.setAge(1000);
student.setName("john");
student.setAge(18);
student.setSchool("SCH");
System.out.println(person.getInfo());
System.out.println(student.getInfo());   }
}return "Name: "+ name + "\n" +"age:"+ age;中返回的name,age指的是成员变量还是局部变量?怎么判别的?

解决方案 »

  1.   

    是你理解的成员变量,getInfo方法里面没有任何局部变量的声明,用到的name什么的是类实例的属性
      

  2.   

    public String getInfo() {
    return "Name: "+ name + "\n" +"age:"+ age;  //这里有定义局部变量吗?肯定是成员变量
     } 
      

  3.   


    class Person {
      String name;
      int age;
      public void setName(String name) {this.name = name;}
      public void setAge(int age) {this.age=age;}
      public String getName() {return name;}
      public int getAge() {return age;}
      public String getInfo() {
    return "Name: "+ name + "\n" +"age:"+ age;  } 
    }如上Person 它一个公共的实体类,它没有设置访问权限,所以它里面属性都是public公共的,也就是成员变量了, 但这样补办不提倡的,安全性太低,一般实体类的属性访问权限是private的,这样安全性能高,值只有自身可以改变,反则子类也可改变其成员变了的值,是很不安全的。
      

  4.   

    成员变量,方法里面没有同名的局部变量,如果有的话要加上thispublic String getInfo() 
    {
    String name = "XiaoBai";
    int age = 12;
    if (name != null)
    {
    return "Name: "+ name + "\n" +"age:"+ age; //这里访问的是局部变量
    }
    return "Name: "+ this.name + "\n" +"age:"+ this.age; //这里访问的是成员变量
    }
      

  5.   

    引用成员变量的时候不是要对象名.成员变量名吗?为什么return "Name: "+ name + "\n" +"age:"+ age;中的name,age却不需要这样呢?
      

  6.   

    因为是在同一个类体的作用范围内,可以直接引用到name其实相当于this.name
    如果放在其他类当中就不行了
      

  7.   


    楼主的理解是正确的,任何引用成员变量的时候是要对象名.成员变量名(java中常叫 field);既然是这样,那么此处为什么可以不需要这样做呢?原因是对于非静态的方法来说,都有一个参数,称之为隐式参数,也就是this,指向当前调用方法的对象;
    如果在方法中引用成员变量时没有显示指定对象名,编译器会给你加上去;
    相当于编译器做了这样的处理:public String getInfo(Person this) {
          return "Name: " + this.name + "\n" + "age:" + this.age;
    } 所以上面即使没有显示的指定对象名同样可以运行,是编译器给你加上去了。还说句,静态方法中为什么不能像上面一样使用成员变量,原因就是静态方法中不存在这个隐式参数this,而任何引用成员变量的时候是要对象名.成员变量名的。以上只是个人理解,希望能帮上忙。