读书人

学JAVA一段时间一直搞不懂set和get方

发布时间: 2012-04-07 17:31:51 作者: rapoo

学JAVA一段时间,一直搞不懂set和get方法的问题
这个两个代码,为什么一个需要用set get方法来访问,一个不需要??不是说用private关键字设置的变量不能直接访问吗?为什么第一个代码可以给变量赋值,第二个代码不行??

Java code
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));    }}


Java code
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");


[解决办法]
你举得这个例子,两个都可以不用setter getter,因为是在同一个类的类体当中,类的任何类型变量都可以直接操作,这时候使用setter getter看不出来效果。既可以直接this.xxx=xxx 也可以调用this.setXxx(xxx)进行赋值,既可以用this.xxx也可以用this.getXxx()取值

出现区别的在于类之外调用类的值,给你贴个例子
Java code
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");    }}
[解决办法]
什么时候要用就看你自己了,没有发现你的第一个代码中有直接修改变量的,有的只是通过构造的时候赋值的
可以参考下面的代码
Java code
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);    }} 


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

读书人网 >J2SE开发

热点推荐