`
huiqinbo
  • 浏览: 352172 次
  • 性别: 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();  
           }  
       } 
分享到:
评论

相关推荐

    java访问权限修饰符public.doc

    访问权限修饰符分为四种:public、protected、friendly 和 private。每种修饰符都有其特定的访问权限和使用场景。 一、public 访问权限修饰符 public 访问权限修饰符表明该成员变量和方法是共有的,能在任何情况下...

    JAVA访问修饰符大归纳

    根据 JAVA 访问修饰符的特性和使用范围,我们可以将其分为三类:修饰符类的访问修饰符、属性的访问修饰符和方法的修饰符。 一、修饰符类的访问修饰符 修饰符类的访问修飾符共有四种:默认、public、abstract 和...

    举例详解Java中的访问权限修饰符

    Java提供了五种访问权限级别,分别是public、friendly(或称为default)、private和protected。下面将详细解释这些访问权限的含义和使用场景。 1. **public**: - 成员(方法、变量):任何类在任何地方都能访问。...

    java常用修饰符.doc

    本文主要分析了Java中常见的访问修饰符(public、private、protected、friendly/default)以及非访问修饰符(final、abstract、static、native)。我们将通过具体的例子和解析深入理解这些修饰符的作用。 首先,...

    Java访问修饰符大归类

    Java 中的访问修饰符可以分为三大类:类的访问修饰符、属性的访问修饰符和方法的访问修饰符。每种修饰符都有其特定的访问权限和用途。 类的访问修饰符 Java 中有四种类的访问修饰符: 1. 缺省(friendly):同一...

    java修饰符

    本文将深入探讨Java的访问控制修饰符,包括`private`、`default`(也称为`friendly`)、`protected`和`public`,以及它们如何影响程序的结构和安全性。 #### 访问控制修饰符:封装的基石 访问控制修饰符是Java语言...

    java成员变量和方法的public等访问限定符的访问权限.doc

    Java 成员变量和方法的 public 等访问限定符的访问权限 在 Java 编程中,访问限定符是控制类、成员变量和方法的访问权限的关键。了解访问限定符的作用域是 Java 基础知识之一,对于编程人员来说是必备的知识。本文...

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

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

    java修饰符使用很给力

    Java修饰符在编程中起着至关重要的作用,它们用于控制类、接口、变量和方法的访问权限以及实现其他特性。本文将深入探讨Java中的访问修饰符及其应用。 首先,我们来了解一下类的访问修饰符: 1. **public**:公共...

    Java中的private、protected、public和default的区别(详解)

    主要有四种访问控制修饰符:`private`、`protected`、`public`和`default`,它们决定了代码的封装性和可访问性。下面我们将详细解释这四种修饰符的含义和使用场景。 1. `public`: - 公共访问修饰符`public`提供了...

    Java+课后习题+第二章节

    类成员的访问控制符有 public,private,protected 及无修饰符。public(公有的):用 public 修饰的成员表示公有的,也就是它可以被其他任何对象访问(前提是对累成员所在的类访问有访问权限)。Private(保护的):类中...

    富士通面试题.doc

    Java 语言中的访问修饰符包括 public、private、protected 和 friendly四种。public 修饰符表示该成员可以被所有类访问。private 修饰符表示该成员只能被同一类访问。protected 修饰符表示该成员可以被同一类及其...

    Java笔试题大全

    - `private`: 私有访问修饰符,只能在定义该成员的同一类内部访问。 - `protected`: 受保护的访问修饰符,可以在同一包内的任何类,以及不同包中的子类中访问。 - 缺省(friendly):默认的访问级别,仅在定义类...

    java四种作用域的说明.doc

    通过合理运用`public`、`private`、`protected`以及默认访问控制符,开发者能够构建出既灵活又安全的软件系统。这些访问控制符不仅帮助实现了封装原则,也提高了系统的可维护性和扩展性。 #### 六、参考资料 - ...

    Java语言程序设计(郑莉)课后习题答案

    * 类成员的访问控制符有 public,private,protected 及无修饰符。 * public(公有的):用 public 修饰的成分表示公有的,也就是它可以被其他任何对象访问(前提是对累成员所在的类访问有访问权限)。 * Private...

    程序设计(JAVA)练习题.pdf

    5. 访问权限修饰符:从控制范围最大到最小排序依次是public、protected、friendly(包内访问,Java中通常用包访问权限代替)和private。因此,正确顺序是B:public>protected>friendly>private。 6. 异常处理:try-...

    类的使用,学习,小结 java定义一个学生类

    总结起来,Java中的类定义、成员变量、方法、构造器、重载、访问控制以及包的使用都是面向对象编程的关键组成部分。理解并熟练掌握这些概念,对于编写健壮、安全的Java代码至关重要。在实际编程中,我们会根据需求...

    Java类与对象

    - 缺省(无修饰符): 也称为package-private或者friendly,表示只能在同一包内的其他类访问。 - `class`: 关键字,用于声明类。 - `classname`: 类名,用于标识该类。 - `extends superclassname`: 表示继承父类,...

    java学习课件ppt2

    1. 修饰符:如public、private、protected等,用于控制类的访问权限。 2. 类名:遵循驼峰命名法,表示类的标识。 3. 成员变量:类中定义的变量,可以是数据类型的实例,也可以是静态(static)变量。 4. 成员方法:...

Global site tag (gtag.js) - Google Analytics