当前位置: 代码迷 >> J2SE >> 学JAVA一段时间,一直搞不懂set和get方法的有关问题
  详细解决方案

学JAVA一段时间,一直搞不懂set和get方法的有关问题

热度:118   发布时间:2016-04-24 01:28:21.0
学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);    }}
  相关解决方案