Java Public Var问题

sha*_*ess 3 java getter-setter

可能重复:
属性和封装

NEWB提醒!!

我从Android和Java开始,我开始理解它,但我想知道为什么我应该使用getter和setter而不仅仅是公共变量?

我看到许多人创建了一个私有变量并创建了一个get和set方法.

这里有什么想法?

sam*_*aur 8

它被称为封装和概念是面向对象编程的核心.这个想法是你隐藏你的类的实现并只暴露契约,即隐藏如何,只揭露什么.您可以通过将变量设为私有来隐藏变量,并提供公共setter-getters和客户端调用以与您的类进行通信的其他公共方法.它们与方法的实际实现或存储变量的方式无关.

例如,假设您有这个类,您将电话号码存储为Long对象:

public class ContactInfo {
    private Long phoneNo;
    public Long getPhoneNo() {
        return phoneNo;
    }
    public void setPhoneNo(Long phoneNo) {
        this.phoneNo = phoneNo;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于该类的客户端只能看到getter/setter,因此您可以通过将电话号码表示切换到PhoneNumber对象来轻松更改类/方法的实现.ContactInfo的客户端根本不会受到影响:

public class ContactInfo {
    private PhoneNumber phoneNo;
    public Long getPhoneNo() {
        return phoneNo.getNumber();
    }
    public void setPhoneNo(Long phoneNo) {
        this.phoneNo = new PhoneNumber(phoneNo);
    }
}
public class PhoneNumber {
    private Long number;
    public PhoneNumber(Long number) {
        this.number = number;
    }
    public Long getNumber() {
        return number;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • +1.请注意,这确实_not_意味着您应该始终为每个字段提供getter和setter; 在某些情况下,您的设计可能会要求根本没有公共访问权限的字段. (2认同)