Java中private , public , protected 几个关键字
2016-03-19 16:15
603 查看
1、关键字 private
class Sundae { private Sundae() {} static Sundae makeASundae() { return new Sundae(); } } public class IceCream { public static void main(String[] args) { //! Sundae sundae = new Sundae() // 构造器是“私有”的,不能这么访问 Sundae sundae = Sundae.makeASundae(); System.out.println(sundae); } }
这个例子向我们证明了使用private 的方便:有时可能想控制对象的创建方式,并防止有人直接访问一个特定的构建器
(或者所有构建器)。在上面的例子中,我们不可通过它的构建器创建一个Sundae 对象;相反,
必须调用makeASundae()方法来实现(注释③)。
③:此时还会产生另一个影响:由于默认构建器是唯一获得定义的,而且它的属性是private,所以可防止
对这个类的继承。
2、关键字 protected
public class Cookie { public Cookie() { System.out.println("Cookie construct"); } void foo() { System.out.println("foo"); } }
public class ChocolateChip extends Cookie{ public ChocolateChip() { System.out.println("ChocolateChip constructor"); } public static void main(String[] args) { ChocolateChip x = new ChocolateChip(); //! x.foo(); // 不能访问 foo } }
对于继承,值得注意的一件有趣的事情是倘若方法foo()存在于类Cookie 中,那么它也会存在于从Cookie继承的所有类中。当类Cookie和类ChocolateChip不在同一个包下时,不能访问foo()方法(同一个包下可以)。当然,亦可将其变成public。但这样一来,由于所有人都能自由访问它,所以可能并非我们所希望的局面。若象下面这样修改类Cookie:
public class Cookie { public Cookie() { System.out.println("Cookie construct"); } protected void foo() { System.out.println("foo"); } }
将方法foo()的访问控制权限设置为 protected 时候,Cookie的子类就能在外部包访问foo()方法了。
x.foo(); 就不会报错了。
这个时候方法 foo() 方法并不是公开的(public)。
相关文章推荐
- java中的System.copyof()与Array.copyof()区别
- [1]java:你真的懂你的第一个Hello World程序吗
- 使用MyEclipse创建Maven项目出现的错误及解决方法
- java并发基础之The volatile keyword
- Java时间转换成ISO8601格林威治天文台的标准时间
- Eclipse开发STM32出现找不到函数的情况的解决方法
- [心得]Java开发中的小心得
- Java并发编程:Lock
- 深入理解Java之集合框架
- Spring Security 引用数据库管理用户权限-----login.jsp 提示"用户名或密码错误"
- 跟我学Spring3(8.2):对ORM的支持之集成Hibernate3
- Java线程池的测试和分析
- Eclipse加入PHP插件并支持PHP自动提示
- [MAVEN]一、maven入门之软件的下载及配置到Eclipse中
- Eclipse真机测试注意事项
- spring入门(12)-spring与hibernate整合完成增删改查的操作(继承HibernateDaoSupport调用hibernateTemplate类)
- spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
- java中编码
- Java基础2
- java类加载资源的问题