public private protected和默认的区别

如题所述

public private protected和默认的区别?如下:

第一, 类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private)。受保护(protected)对子类相当于公开,对不是同一包中的没有父子关系的类相当于私有。

总结如下表

第二,在说明这四个关键字之前,我想就class之间的关系做一个简单的定义:对于继承自己的class,base class可以认为他们都是自己的子女,而对于和自己一个目录下的classes,认为都是自己的朋友。

1、 public :对 所有用户 开放,所有用户都可直接调用
2、 private :私有。 除了class自己之外,任何人都不可直接使用 ,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可使用。
3、 protected :对于子女、朋友来说,就是public的,可自由使用,无任何限制;而对于其他的外部class,protected就变成private。( 同一个包中的类,若不在同一个包中,必须为其子孙类才可使用)

4、默认: 默认可以称为friendly,但是java语言中是没有friendly这个修饰符的 ,这样称呼应该是来源于c++。默认的访问权限是 包级访问权限 。

第三,另外补充说明:
1.每个编译单元(类文件)都仅能有一个public class
2.public class的名称(包含大小写)必须和其类文件同名。
3.一个类文件(*.java)中可以不存在public class。
如果我们在某个包内撰写一个class,仅仅是为了配合同一包内的其他类工作,并且我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调 用这个类的类)看而伤脑筋;或者有可能过一段时间之后会彻底改变原有的做法,并以全新的版本代替旧版本,这种情况下一般会默认。
4、 class不可以是private和protected 。

温馨提示:内容为网友见解,仅供参考
第1个回答  2016-06-29

public private protected和默认的区别我们可以分为以下几个点:

1、我们知道private修饰词,表示成员是私有的,只有自身可以访问;  

2、而protected,表示是受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。 

3、但无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限;

 4、然而public修饰词和其他不一样的是,表示成员是公开的,所有其他类都可以访问;


补充一点知识:

Public,protected,private解析

Public成员可以被同一个类或同一个包或不同包下的类都可以访问。

Protected成员可以被同一个类或同一个包下的类可以访问,不能被不同包下的类访问。

Private成员可以被于同一个类访问,不能被同一个包或不同包下的类访问。

 


特别说明一点protected在不同包子类下为yes的情况:

包外子类有权访问父类成员是什么意思?它指子类继承该成员。 然而,这不意味着包外子类能够使用父类实例的引用访问该成员。换句话说,保护=继承。保护不是指子类能够处理受保护的父类成员,就好像它是公有的那样。因此,如果包外子类获得父类引用,该子类不能在父类引用上使用点运算符来.访问受保护的成员。子类只能通过继承看到受保护的成员。

相似回答