`
huiqinbo
  • 浏览: 335167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

访问权限修饰符public protected friendly private用法总结

阅读更多
在单个类中private,protected没有什么太大的区别,但是如果继承的话,对于父类中的protected成员子类可以访问,但是private成员子类不能访问了,也就是说protected成员只对对应用程序隐藏,而private对应用程序和子类都隐藏。
首先声明:java中,friendly这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是friendly。
    为了条理清晰,分三种不同情况来总结。

   一 访问权限修饰符修饰成员变量和方法
   public:表明该成员变量和方法是共有的,能在任何情况下被访问。
  
   protected:必须在同一包中才能被访问。(说的比较简单,看个例子就明白了)   
       Java代码
eg:class A  
          {   
            protected int weight ;  
            protected int f( int a,int b   )     
            {  
              // 方法体  
            }  
           }   

eg:class A
          {
            protected int weight ;
            protected int f( int a,int b   )  
            {
              // 方法体
            }
           }     
       假设B与A在同一个包中,则
          Java代码
class B  
         {  
           void g()  
           {  
             A a=new A();  
             A.weight=100;//合法  
             A.f(3,4);    //合法  
            }  
          } 

class B
          {
            void g()
            {
              A a=new A();
              A.weight=100;//合法
              A.f(3,4);    //合法
             }
           }
   特别说明:什么是在同一个包中?
   答:用package打包在一起的class ,叫在同一个包中。(不明白,举个例子)
       eg:在JDK的src\java\io中,你会看到许多java类,第一句源代码都是package java.io;
       没有使用package打包的,在同一目录下的类也会被视做同一个包。
  
   friendly:在这种情况下中,同protected。区别在第二和第三种情况中。
     Java代码
eg: class A  
        {   
          int weight ;  
          int f( int a,int b   )     
          {  
            // 方法体  
          }  
         }    

  eg: class A
          {
            int weight ;
            int f( int a,int b   )  
            {
              // 方法体
            }
           }     
       假设B与A在同一个包中,则
          Java代码
class B  
         {  
           void g()  
           {  
             A a=new A();  
             A.weight=100;//合法  
             A.f(3,4);    //合法  
            }  
          } 

class B
          {
            void g()
            {
              A a=new A();
              A.weight=100;//合法
              A.f(3,4);    //合法
             }
           }
    private: 只能在本类中访问。
           Java代码
eg:    class   Test  
                  {    
                     private int money;  
                     Test()  
                     {  
                        money=2000;  
                     }  
                     private int getMoney()  
                     {  
                       return money;  
                      }  
                   public  static  void main(String args[])  
                   {  
                       Test te=new  Test();  
                       te.money=3000;             //合法  
                       int m=te.getMoney();       //合法  
                       System.out.println("money="+m);  
                    }  
                   }  
                  

  eg:    class   Test
                    { 
                       private int money;
                       Test()
                       {
                          money=2000;
                       }
                       private int getMoney()
                       {
                         return money;
                        }
                     public  static  void main(String args[])
                     {
                         Test te=new  Test();
                         te.money=3000;             //合法
                         int m=te.getMoney();       //合法
                         System.out.println("money="+m);
                      }
                     }
                  
   PS: 实际上,把重要的数据修饰为private,然后写一个public的函数访问它,正好体现了OOP的封装特性,是OOP安全性的体现。
  

二  访问权限修饰符修饰类
   1,不能用protected和private修饰类。
   2,用friendly修饰的类叫友好类,在另外一个类中使用友好类创建对象时,要保证它们在同一包中。
 

三   访问权限修饰符与继承
   这里的访问修饰符指的是修饰成员变量和方法。可以分为两种情况:
   1,子类与父类在同一包中
    此时只有声明为private的变量与方法不能被继承(访问)。
   Java代码
eg:  
     class Father  
     {  
       private int money ;  
       int weight=100;  
         
      }  
     class Son extends Father  
     {  
       viod f()  
       {  
         money=10000;//   非法  
         weight=100; //   合法  
        }  
      }  
    2,子类与父类不在同一包中  
    此时private与friendly均不能被继承(访问), protected与public可以。  
     eg:  
       Father.java  
 
      package com.aaa  
      public class Father  
     {  
       int height ;  
       protected  int money=120;  
       public int weight;  
       protected int getMoney()  
       {  
         return money;  
       }  
       void setMoney(int newMoney)  
       {  
         money=newMoney;  
       }  
      }  
       
      Son.java  
      package com.bbb  
      import com.aaa.Father;  
      public class Son extends Father  
      {  
         void f()  
         {  
           money=10000;//合法  
           //height=170;//非法,height为friendly修饰的变量  
           System.out.println(money);//输出结果是10000  
           //setMoney(300);          //非法  
           int number=getMoney();    //合法  
           System.out.println(number);//输出结果是10000  
          }  
           public  static  void main(String args[])  
          {  
            Son sss=new Son();  
            sss.f();  
           }  
       } 
分享到:
评论

相关推荐

    说出作用域public, private, protected,以及不写得区别

    说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × ×

    java实验报告 四个访问权限,抽象数据类型栈,计算器

    编写四个类A、B、C、D,其中类A、B在同一个包中,类C、D在另一个包中,且类C为类A的子类,通过这四个类来测试private,protected,public和friendly四个访问权限的区别。实现栈的基本操作。实现计算器。

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    其它对象对它的访问,访问权限所以有以下几种:private, protected, public, friendly。 1.8.2 对象 把类实例化,我们可以生成多个对象,这些对象通过消息传递来进行交互(消息 传递即激活指定的某个对象的方法以改变...

    java面试宝典.docx

    (3)、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。 作用域 当前类 同一package 子孙类 其他package  public √ √...

    JAVA面试题149例

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    java基础知识

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    java笔试题,java程序员常见的笔试

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    计算机(专升本)Java程序设计复习资料.doc

    A.private B.protected C.public D.friendly 4.关键字supper的作用是( )。 A.用来访问父类被隐藏的成员变量 B.用来调用父类中被重载的方法 C.用来调用父类的构造函数 D.以上都是 5.下面关于类及其修饰符的一些...

    抽象和封装PPT

    5.封装 encapsulation (private, friendly, protected, public) 5.1 属性私有,通过getXXX()或 setXXX()方法来取值或赋值,在setXXX()方法中添加 代码进行控制 5.2 6.this 表示对象本身(部分内容还要和后面的...

    java 语言中常见易错知识点

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    java笔试题集

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    最新最全Java面试题汇总

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    java笔试题目Java基础方面

    0、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    java面试题大全-基础方面

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    java面试宝典

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他 package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × ...

    java各大公司面试题详解(有案例分析哦)

    作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

    JAVA笔试题目 都是一些大公司啊 找工作很有用的呵

    、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × ...

    Java三个实验报告

    1.编写四个类A,B,C,D,其中类A,B在一个包中,类C,D在另一个包中,且类C为类A的子类,通过这四个类来测试private,protected,public,和friendly四个访问权限的区别。 2.用Java实现栈 3.做个简单的计算器

    Java笔试题目汇总

    0、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 不写时...

Global site tag (gtag.js) - Google Analytics