zoukankan      html  css  js  c++  java
  • Java中访问权限修饰符public protected 缺省默认 private的用法总结(转)

     1、访问权限符:
    (1)public:

    对于成员来说任何其他类都可以访问它们,不管在同一个包中还是在另外的包中。
    对于类来说:    也是一样。

    (2)friendly:

    对于成员老说:如果一个类的成员没有任何权限修饰,那么它门就是缺省包访问权限,用friendly来表示,注

    意friendly不是Java中的关键字,这里是个人喜欢的方式用它表示而已。同一个包内其它类可以访问,但包外

    就不可以。对于同一个文件夹下的、没有用package的classes,Java会自动将这些classes初见为隶属于该目录

    的default package,可以相互调用class中的friendly成员。如以下两个class分别在同一个文件夹的两个文件

    中,虽然没有引入package,但隶属于相同的default package。

       class Sundae{
       //以下两个方法缺省为friendly
       Sundae(){}
       Void f() {System.out.println(“Sundae.f()”);
       }
       public class IceCream{
       public static void main(String[] args){
       Sundae x = new Sundae();
       x.f();
       }
       }

    对于类来说:同一个包中的类可以用。总之,类只可以声明为public或者friendly。

    (3)private:

    对于对于成员来说:只能在该成员隶属于的类中访问。
    class Sundae{
       private Sundae(){}//只能在Sundae class中被调用
       Sundae(int i) {}
       static Sundae makASundae() {
       return new Sundae();
       }
       }
       public class IceCream{
       public static void main(String[] args){
       // Sundae class中构造函数Sundae()是private,
       // 所以不能用它进行初始化
       //Sundae x = new Sundae();
       Sundae y = new Sundae(1);//Sundae(int)是friendly,可以在此调用
       Sundae z = Sundae.makASundae();
       }
       }

    对于类来说:类不可以声明为private。

    (4)protected:

    对于对于成员来说:相同包中的类可以访问(包访问权限);基类通过protected把基类中的成员的访问权限赋予派生类不是所有类(派生类访问权限)。

    例子:package c05.local;
    import pack1.Cookie;
    //注意:在这里ChocolateChip继承了类Cookie,按道理bite()方法也在
    //ChocolateChip中,可以用x.bite直接调用,但是不可以的,因为类ChocolateChip
    //和Cookie类不在一个包中,各自具有包访问权限,为了能够使用x.bite()必须要把
    //Cookie方法的访问权限换成public或者protected,但是一旦换成public所有的人就
    //可以访问了,这样达不到隐私的要求,所以设置成protected最好,既可以顺利访问,也可以
    //避免外面的类调用,保护好隐私的作用
    public class ChocolateChip extends Cookie {
      
        public ChocolateChip() {
         System.out.println("ChocolateChip constructor");
        }
        public static void main(String[] args) {
          ChocolateChip x = new ChocolateChip();
          x.bite(); // Can't access bite
        
        }
    } ///:~


    package pack1;

    public class Cookie {
    public Cookie()
    {
    System.out.println("Cookie constructor");
    }

    protected void bite(){System.out.println("bite");}

    }


    对于类来说:类不可以声明为protected

    对于类的权限修饰,下面有更好的解释:

    Class类的访问权限:
    public:可以供所有的类访问。
    默认:默认可以称为friendly但是,java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++。默认的访问权限是包级访问权限。
             即如果写了一个类没有写访问权限修饰符,那么就是默认的访问权限,同一个包下的类都可以访问到,即使可以实例化该类
             (当然如果这个类不具有实例化的能力除外,比如该类没有提供public的构造函数)。

    说明:
           1、每个编译单元(类文件)都仅能有一个public class
           2、public class的名称(包含大小写)必须和其类文件同名。
           3、一个类文件(*.java)中可以不存在public class。
            这种形式的存在的场景:如果我们在某个包内撰写一个class,仅仅是为了配合同包内的其他类工作,而且
           我们不想再为了撰写说明文档给客户(不一定是现实意义的客户,可能是调用这个类的类)看而伤脑筋,而且有可能过一段时间之后
           有可能会彻底改变原有的做法,并完全舍弃旧版本,以全新的版本代替。
           4、class不可以是private和protected。
           5、如果不希望那个任何产生某个class的对象,可以将该类得所有构造函数设置成private。但是即使这样也可以生成该类的对象,就是class的static的成员(属性和方法)可以办到。

  • 相关阅读:
    P4555 [国家集训队]最长双回文串(回文树)
    【洛谷 P3805】 【模板】manacher算法
    【洛谷 P2485】 [SDOI2011]计算器 (BSGS)
    【洛谷 P3846】 [TJOI2007]可爱的质数 (BSGS)
    【洛谷 P1712】 [NOI2016]区间 (线段树+尺取)
    【洛谷 P1251】 餐巾计划问题 (费用流)
    【洛谷 P1337】[JSOI2004]平衡点 / 吊打XXX (模拟退火)
    【POJ 1719】 Shooting Contest (二分图匹配)
    【洛谷 P1631】 序列合并 (堆)
    【洛谷 P2515】 [HAOI2010]软件安装 (缩点+树形背包)
  • 原文地址:https://www.cnblogs.com/bluestorm/p/2377613.html
Copyright © 2011-2022 走看看