访问控制符
public
- 任何人都可以访问
protected ( 目录/包 级别的访问控制 )
- 只有子类和 同一个包 (目录下的文件) 的可以访问
包级私有 - 不加限定符 ( 目录/包 级别的访问控制 )
- 只有 同一个包 (目录) 中的类可以访问
注意: 包之间是 没有嵌套包含关系 的 (虽然在目录结构上可能有嵌套关系).
只有类自己可以访问.
- 当我们需要封装的时候, 我们需要使用 private, 将它的成员隐藏起来.
JavaBean 🥔 规范
- 参考: https://zh.wikipedia.org/wiki/JavaBeans
- Java 的意思是 爪哇咖啡, Java Bean 指的就是爪哇咖啡豆, JavaBean 即指一个规范, 也指代符合这个规范的 Java 类.
什么是JavaBean ? JavaBean 规范
特征:
- 1. 所有属性都是私有的.
- 有一个 public 的无参构造器.
- 有一个 public 的无参构造器.
- 属性可以通过 get、set、is(可以替代get,用在布尔型属性上)方法或遵循特定命名规范的其他方法访问。
- 属性可以通过 get、set、is(可以替代get,用在布尔型属性上)方法或遵循特定命名规范的其他方法访问。
- 可序列化
- 可序列化
getter 名约定
- 对于非布尔值, getter 名为: getFieldname
- 对于布尔值, getter 函数名为: isFieldname
- 对于非布尔值, getter 名为: getFieldname
setter 名约定
setter 函数名均为 setFieldname
public class Person {
private int id=1000;
private boolean male;
public Person(){ }
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public boolean isMale() { return male; }
public void setMale(boolean male) { this.male = male; }
}
封装应该尽可能的隐藏 内部细节, 仅仅暴露出接口.
- JavaBean 类的成员 全部都通过 getter, setter 方法 封装起来了.
JavaBean 的应用
JSON 相关类库, 例如 fastjson 包, 会根据 JavaBean 中的 getter setter 来进行序列化和反序列化.
- fastjson 在生成 JSON 文本时 , 是通过 实例对象中 符合 JavaBean 约定的 getter 来获得的, 它并不关心实例成员实际的值.
- 同样地, 在反序列化时, 它根据类中的 setter 来生成对象.
- fastjson 在生成 JSON 文本时 , 是通过 实例对象中 符合 JavaBean 约定的 getter 来获得的, 它并不关心实例成员实际的值.
如果没有为 字段定义 符合 JavaBean 约定的 getter , 那么序列化后只能得到一个空的 JSON 对象 { }
示例1: ```java public class Cat { private String name; private boolean cute; public Cat(String name, boolean cute) {
this.name = name;
this.cute = cute;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public boolean isCute() {
return cute;
} public void setCute(boolean cute) {
this.cute = cute;
} public static void main(String[] args) {
Cat cat = new Cat("Kitty", true);
System.out.println(JSON.toJSONString(cat));
} }
// output {“cute”:true,”name”:”Kitty”}
<br />
- 示例 2<br />
- **对 json 进行读写时,** **只看符合 JavaBean 约定的 getter / setter 方法, 不看实际的属性**.
```java
public class Cat {
public Cat() { }
public String getName() {
return "1111";
}
public void setName(String name) { }
public String isCute() { return "heyheyhey"; }
public void setCute(boolean cute) {}
public static void main(String[] args) {
Cat cat = new Cat();
System.out.println(JSON.toJSONString(cat));
}
}
// output
{"name":"1111"}
使用 IDEA 生成 getter, setter
- 使用 Idea 生成 getter 时, getter 方法和 setter 方法名是固定格式的 :
- getFieldName
- setFieldName
public class Person {
private int id=1000;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
- getFieldName