java public的用法_Java 封装 private public protected和用法

Java是使用“访问控制符”来控制哪些细节需要封装,哪些细节需要暴露的。 Java中4种“访问控制符”分别为private、default、protected、public,它们说明了面向对象的封装性,所以我们要利用它们尽可能的让访问权限降到最低,从而提高安全性。

下面详细讲述它们的访问权限问题。其访问权限范围如表5-1所示。

表5-1 访问权限修饰符

89eb119cc63c101a936fb49ec0ddcd28.png

1. private 表示私有,只有自己类能访问

2. default表示没有修饰符修饰,只有同一个包的类能访问

3. protected表示可以被同一个包的类以及其他包中的子类访问

4. public表示可以被该项目的所有包中的所有类访问

下面做进一步说明Java中4种访问权限修饰符的区别:首先我们创建4个类:Person类、Student类、Animal类和Computer类,分别比较本类、本包、子类、其他包的区别。

public访问权限修饰符:

599a698f4c3cc90ed1825330d0157bb6.png

图5-8 public访问权限—本类中访问public属性

efba9f851f101e7ffbc9c0ce68e0c084.png

图5-9 public访问权限—本包中访问public属性

e82f74cc8e3bd0fb60364fc45fb9bbca.png

图5-10 public访问权限—不同包中的子类访问public属性

748e5afbe98712977e6daf0c481ee354.png

图5-11 public访问权限—不同包中的非子类访问public属性

通过图5-8 ~ 图5-11可以说明,public修饰符的访问权限为:该项目的所有包中的所有类。

protected访问权限修饰符:将Person类中属性改为protected,其他类不修改。

1aaa174094b3373e95b3f96057a91b39.png

图5-12 protected访问权限—修改后的Person类

1adbaface21900bf622ba6c3309de75a.png

图5-13 protected访问权限—不同包中的非子类不能访问protected属性

通过图5-12和图5-13可以说明,protected修饰符的访问权限为:同一个包中的类以及其他包中的子类。

默认访问权限修饰符:将Person类中属性改为默认的,其他类不修改。

725b4d5c20995baf9ac5d3ebc82381a2.png

图5-14 默认访问权限—修改后的Person类

通过图5-14可以说明,默认修饰符的访问权限为:同一个包中的类。

private访问权限修饰符:将Person类中属性改为private,其他类不修改。

cccdbde26888b9b91e980451658f46ca.png

图5-15 private访问权限—修改后的Person类

通过图5-15可以说明,private修饰符的访问权限为:同一个类。

类的属性的处理:

1. 一般使用private访问权限。

2.  提供相应的get/set方法来访问相关属性,这些方法通常是public修饰的,以提供对属性的赋值与读取操作(注意:boolean变量的get方法是is开头!)。

3. 一些只用于本类的辅助性方法可以用private修饰,希望其他类调用的方法用public修饰。

【示例5-10】JavaBean的封装实例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

public class Person {

// 属性一般使用private修饰

private String name;

private int age;

private boolean flag;

// 为属性提供public修饰的set/get方法

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public boolean isFlag() {// 注意:boolean类型的属性get方法是is开头的

return flag;

}

public void setFlag(boolean flag) {

this.flag = flag;

}

}

下面我们使用封装来解决一下5.4.1中提到的年龄非法赋值的问题。

【示例5-11】封装的使用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

class Person {

private String name;

private int age;

public Person() {

}

public Person(String name,int age) {

this.name = name;

// this.age = age;//构造方法中不能直接赋值,应该调用setAge方法

setAge(age);

}

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setAge(int age) {

//在赋值之前先判断年龄是否合法

if (age >130 || age 0) {

this.age =18;//不合法赋默认值18

}else {

this.age = age;//合法才能赋值给属性age

}

}

public int getAge() {

return age;

}

@Override

public String toString() {

return "Person [name=" + name +", age=" + age +"]";

}

}

public class Test2 {

public static void main(String[] args) {

Person p1 =new Person();

//p1.name = "小红"; //编译错误

//p1.age = -45;  //编译错误

p1.setName("小红");

p1.setAge(-45);

System.out.println(p1);

Person p2 =new Person("小白",300);

System.out.println(p2);

}

}

执行结果如图5-16所示:

0352374620c690d641c16ea83dbf31e9.png

图5-16 示例5-11运行效果图

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值