A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© U芽Lady 中级黑马   /  2013-4-7 23:15  /  1711 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public protected private 还有默认的,我已经知道他们的作用范围,但是自己写程序的时候不知道他们在什么时候用什么比较好,有没有对这块很了解帮我总结一下,这些修饰符在什么情况下用比较合理

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

7 个回复

倒序浏览
本帖最后由 luguoyuanf 于 2013-4-7 23:33 编辑

public: 成员方法或者成员变量前面使用后所有类都能访问
protected: 成员方法或者成员变量前面使用后同包中的其他类访问,不同包中的子类访问
private: 成员方法或者成员变量前面使用后只能是本类中访问,在定义功能的时候一般把都是私有,值提供public的访问接口
default: 默认就被包中其他类访问,同一个类访问
我每天的学习总结都会发帖,你可以看看我的帖子.
http://bbs.itheima.com/thread-43625-1-1.html

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
打个比方:public 公共的,比如你家附近的公共侧所,谁都可以上 ;private 私有的,比如你的个人隐私,你会告诉别人么;protected 比如你的感情出问题了,我想你应该会和好朋友或亲属家人诉说,不会对陌生人说;

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 - -

查看全部评分

回复 使用道具 举报
打一个比方吧:
就class之间的关系做一个简单的定义,对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。

1、public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
2、private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。

作用域 当前类 同一package 子孙类 其他package
public       √          √           √            √
protected √         √            √            ×
friendly     √         √            ×            ×
private     √         ×            ×             ×

不写时默认为friendly


在初学Java的时候,都不会提访问权限和修饰符的问题,在Java的学习中一般都要到包概念学完才会涉及访问控制:
      priavte          本类可见
      public            所有类可见
      protected      本包和所有子类都可见
      friendly          本包可见(即默认的形式)

      其实在实际应用中,public和private是比较熟悉和好记忆的,主要记住区别protected和friendly两种访问控制修饰符。

      那么在实际应用中,private的类型是在封装的概念上体现较为明显的。private类型的变量都需要通过调用对象的getter和setter方法来访问。为了安全起见,public多适用于构造方法(单对象类除外)、类静态常量等一些形式。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
public:一般提供外部的访问(比如ArrayList的add()方法等类似这样的)
private :只在一个类内部使用,一般多在属性和方法上。这样也比较安全。
protected :不能挎包使用,只能在相同包下或子类父类间访问。但是,不能在一个子类中访问另一个子类的protected方法,尽管这两个子类继承自同一个父类。
default:一般不使用。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
刚开始学确实不太明白什么时候用哪个修饰符,要想熟练使用这些修饰符,得多看看别人写的程序,多想想为什么要用这个修饰符。
如果你现在处于学习阶段,那你不急着把这些全部搞懂,你可以带着这些疑问在以后的学习过程中边学边思考着个问题,时间长了你自己会总结出规律
如果别人给你发了一堆规律,你光靠死记硬背是不靠谱的,既浪费精力又不能理解。只有自己总结的规律才不会忘记。
但是如果你急着做开发,那就只能多看看代码了。
告诉你个不太靠谱的方法,如果实在不知道用哪个修饰符,就用万能的public ,这个不影响程序运行。等慢慢的编的程序多了就知道该用哪个了

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
public:访问不受限制。      
default:访问仅限于包含类或从包含类派生的类型。只有包含该成员的类以及继承的类可以存取.        
protected :访问仅限于当前程序集或从包含类派生的类型。  
private:访问仅限于包含类型。只有包含该成员的类可以存取.

访问控制修饰.png (79.67 KB, 下载次数: 32)

访问控制权限

访问控制权限

评分

参与人数 1技术分 +2 收起 理由
陈丽莉 + 2 赞一个!

查看全部评分

回复 使用道具 举报
看需求,一开始学习的时候没有必要深究到底用在哪,为了方便,开始的时候都使用public,等你的代码到达一定量级的时候,自然就明白了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马