这个两个代码,为什么一个需要用set get方法来访问,一个不需要??不是说用private关键字设置的变量不能直接访问吗?为什么第一个代码可以给变量赋值,第二个代码不行??
class Person
{
private String name;
private int age;
Person(){
System.out.println("this is a void Person()");
}
Person(String name,int age){
this.name = name;
this.age = age;
}
public String info(){
return "the man is name:"+name+" age:"+age;
}
}class Teacher extends Person
{
private String title;
Teacher(){
System.out.println("teacher()");
}
Teacher(String name,int age,String title){
super(name,age);
this.title = title;
}
public String info(){
return super.info()+" title:"+title;
}
public String toString(){
return "i`am a teacher wang!";
}
}
public class Testequals
{
public static void main(String arg[]){
Teacher teach1 = new Teacher("wang",45,"high");
Teacher teach2 = new Teacher("wang",45,"high");
System.out.println(teach1.info());
System.out.println(teach1.toString());
System.out.println(teach1.equals(teach2));
}}
class Student {
private String name;
private String sex;

public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
}
}
public class TestStudent{
public  static void main(String[] args){
Student student=new Student();
student.setName("zhangsan");
student.setSex("male");

解决方案 »

  1.   

    你举得这个例子,两个都可以不用setter getter,因为是在同一个类的类体当中,类的任何类型变量都可以直接操作,这时候使用setter getter看不出来效果。既可以直接this.xxx=xxx 也可以调用this.setXxx(xxx)进行赋值,既可以用this.xxx也可以用this.getXxx()取值出现区别的在于类之外调用类的值,给你贴个例子class Student {
        private String name;
        private String sex;    public Student(){    }
        public Student(String name ,String sex){
              this.name=name; //在同一个类 ,等同this.setName(name);
              this.sex = sex; //在同一个类 ,this.setSex(sex);         
        }    public String getName() {
            return name;
        }    public void setName(String name) {
            this.name = name;
        }    public String getSex() {
            return sex;
        }    public void setSex(String sex) {
            this.sex = sex;
        }
    }
    public class TestStudent{
        public  static void main(String[] args){
            Student student=new Student();
    //        student.name="abc" 这一行会编译出错        
    // 在Student类体之外,要想给name属性赋值
            //必须要用public的setter方法,因为name属性声明为private类型
            //这就是setter的意义        student.setName("zhangsan");
            student.setSex("male");
        }
    }
      

  2.   

    第一个程序执行到Teacher teach1 = new Teacher("wang",45,"high");时将变量传到Teacher(String name,int age,String title)然后再super继承到person 的Person(String name,int age);然后就构造出一个teacher对象以下相同 
    第二个程序没有构造方法 默认的为public student(){},所以你创建一个对象之后其实它是没有信息的 只能通过内部方法向其中赋值
      
    我也是新手 表达的不好见谅  其实就是这个原因啦  建议你看看清华大学出版社的《java语言程序设计》的继承那一段
      

  3.   

    主要是给类属性赋值、取值,你可以使用任意能达到目的的方式,不一定get、set。
      

  4.   

    不是很清楚楼主想问什么
    如果说是访问控制的话,一般都是建议把成员变量设成私有,然后用set、get的方法来访问,这样比较安全
      

  5.   

    set和get是为了给属性赋值和取值,方法名为set和get只是为了通俗易懂的,但是不一定就只有这样才能赋值取值,通过其他的方法照样可以达到同样效果,例如构造赋值,非set方法赋值,非get方法取值,只要方法名是public可以被访问就行,
      

  6.   

    getter和setter是一种规则,是一种框架下的约定。
      

  7.   

    getter和setter是一种规则,是一种框架下的约定。
    主要是给类属性赋值、取值,你可以使用任意能达到目的的方式,不一定get、set。
      

  8.   

    什么时候要用就看你自己了,没有发现你的第一个代码中有直接修改变量的,有的只是通过构造的时候赋值的
    可以参考下面的代码public class Person
    {
    private String name;
    private char sex;
    private int age; public Person()
    {
    }
    public Person(String name, char sex, int age)
    {
    this.name = name;
    this.sex = sex;
    this.age = age;
    }
    public void setName(String name)
    {
    this.name = name;
    }
    public  String getName()
    {
    return this.name;
    }
    public void setSex(char sex)
    {
    this.sex = sex;
    }
    public char getSex()
    {
    return this.sex;
    }
    public void setAge(int age)
    {
    this.age = age;
    }
    public int getAge()
    {
    return this.age;
    }
    public  void print()
    {
    System.out.println("name: " + name + "\n" + "sex: " + sex + "\n" + "age: " + age);
    }
    }
    public class PersonTest1
    {
    public static void main(String[] args)
    {
    //不可以直接修改Person的成员变量
    /*
    Person p = Person();
    p.name = "zhangsan";
    p.sex = 'm';
    p.age = 16;
    p.print();
    */
    Person p = new Person("zhangsan", 'm', 18);
    p.print();
    //不可以直接访问Person的成员变量
    /*
    System.out.println(p.age);
    */
    System.out.println("------------------");
    p.setName("lisi");
    p.setSex('w');
    p.setAge(16);
    p.print(); System.out.println("-------------------");
    //如果没有get的方法,输出Person中的数据只有在Person中定义一个
    //函数负责输出
    System.out.println(p.getName());
    System.out.println(p.getSex());
    System.out.println(p.getAge());
    }
    }
      

  9.   

    变量是private的,
    get,set方法是public的一般,
      

  10.   

    private String name
    public void setName(String name){
         this.name = name;    // 看上去和public String name没区别
                              // 但是
         在这里,你可以写很多代码
         // fk
         fk
         fk
         上面也一样,本质上就是归你控制了
         如果,public String name的话,你没就法了.
    }
      

  11.   

    定义set和get函数来修改和获得private的变量,更安全
      

  12.   

    没什么道理的,SUN 的技术标准而已。http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/