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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 温立华 中级黑马   /  2013-3-19 19:41  /  1591 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 温立华 于 2013-3-20 10:01 编辑

有关public ,protected, private ,默认类的区别.非常感谢!

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-19 23:05

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

7 个回复

倒序浏览
这个毕老师的视频里面讲的很详细的。
回复 使用道具 举报
1、private修饰词,表示成员是私有的,只有自身可以访问;   
2、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。   
3、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限;  
4、public修饰词,表示成员是公开的,所有其他类都可以访问;

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
楼上大神已经说得很清楚了...
回复 使用道具 举报
四者的区别主要体现在访问权限上:
访问权限最高的是public,所有其他类都可以访问。
访问权限最低的是private,只有本类中可见。
访问权限居中的是protected和默认修饰符,protected修饰的属性可以被同一个包中和子类访问,但默认修饰符修饰的只能被同一个包中的其他类访问,即使是子类也不能访问。
所以权限从大到小是:public>protected>friendly(默认)>private

我建议楼主去网上搜一下,有一个表格帮助记忆。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
放在帖子里,以后如果忘记了打开帖子就看见了.
回复 使用道具 举报
public(接口访问权限): Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
private(你无法访问): Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
protected(继承访问权限): 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
default(包访问权限):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 顾传文 于 2013-3-19 21:42 编辑

1.         外部类class的访问权限修饰符:外部类只能用访问权限修饰符public修饰或不加任何访问权限修饰符。
2.         局部变量的访问权限修饰符:局部变量不能被任何访问权限修饰符修饰,因为局部变量的作用范围就是局部,用访问权限修饰符修饰没有任何意义。
public class Test{    void doSomething(){        private String s = "abc";//编译不通过(不能用访问权限修饰符修饰)        int i = s.length();    }}

3.         访问修饰符的作用域
作用域
当前类
同一package
子类
其他package
Public
Protected
×
package-private(default)
×
×
private
×
×
×

4.         Protected注意事项。(protected的意思是本包可以访问,子类可以继承)
package A;
public class Fu {
    protected void show(){
        System.out.println("父类show方法");
    }
}
package B;//其它包
import A.Fu;
public class Zi extends Fu{
    public static void main(String[] args) {
        Fu fu = new Fu();
        fu.show();//编译不通过,在其它包中无法访问。
        Zi zi = new Zi();
        zi.show();//编译通过,子类可以继承。
Fu fu2 = new Zi();
       fu2.show();//编译不通过,多态中调用方法时,编译时看左边。
    }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马