黑马程序员技术交流社区

标题: 有关public ,protected [打印本页]

作者: 温立华    时间: 2013-3-19 19:41
标题: 有关public ,protected
本帖最后由 温立华 于 2013-3-20 10:01 编辑

有关public ,protected, private ,默认类的区别.非常感谢!
作者: 高境    时间: 2013-3-19 19:43
这个毕老师的视频里面讲的很详细的。
作者: 郭利超    时间: 2013-3-19 19:44
1、private修饰词,表示成员是私有的,只有自身可以访问;   
2、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。   
3、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限;  
4、public修饰词,表示成员是公开的,所有其他类都可以访问;
作者: 李尧    时间: 2013-3-19 19:50
楼上大神已经说得很清楚了...
作者: 郝强勇    时间: 2013-3-19 19:54
四者的区别主要体现在访问权限上:
访问权限最高的是public,所有其他类都可以访问。
访问权限最低的是private,只有本类中可见。
访问权限居中的是protected和默认修饰符,protected修饰的属性可以被同一个包中和子类访问,但默认修饰符修饰的只能被同一个包中的其他类访问,即使是子类也不能访问。
所以权限从大到小是:public>protected>friendly(默认)>private

我建议楼主去网上搜一下,有一个表格帮助记忆。
作者: 温立华    时间: 2013-3-19 20:04
放在帖子里,以后如果忘记了打开帖子就看见了.
作者: 戴乾刚    时间: 2013-3-19 20:19
public(接口访问权限): Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
private(你无法访问): Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
protected(继承访问权限): 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
default(包访问权限):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。
作者: 顾传文    时间: 2013-3-19 21:41
本帖最后由 顾传文 于 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();//编译不通过,多态中调用方法时,编译时看左边。
    }
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2