• java面向对象中四种权限(private,protected,public,友好型)详解


    俗话说没有规矩就没有方圆,java作为一门严谨的面向对象的高级编程语言,自然对权限整个重要的问题有严格的控制。

    Java一共有四种权限,private (私有)public(公有)Protected(受保护)还有友好型

    在java里,这些语句都可以修饰类中的成员变量和方法,但是只有public和友好型可以修饰类。举个例子:

    接下来就详细解释一下这几种权限的差别(博客最后有表格)按权限由低到高:(高权限有低权限所有特性)

    Private:

         类中的所有private方法和private 成员变量只能在类中访问而不能在其他类中访问。

    例如:

    1. package Main;  
    2.   
    3. public class Private {  
    4.     private int a;  
    5.     private int b;  
    6.     Protected (){  
    7.         this.a=1;  
    8.         this.b=2;//a和b只能在Private类中调用  
    9.     }  
    10.     private void set(){  
    11.         System.out.println(""+a+""+b+" ");  
    12.     }  
    13.     void Print(){  
    14.         this.set();//只能在这里用;  
    15.     }  
    16. }  



    友好型和protected:

         如果在另一个类中声明其他的一个类,如果这两个在一个包中那么另一个类能访问这个其他类的友好型变量不同包不能访问:

         如果在另一个B类中声明其他的一个类A,如果这两个在一个包中那么另一个类B也能能访问这个其他类A的protected变量(或方法),如果不在一个包,那么如果类A有一个父类C如果,如果父类C中有一个protected变量(或方法),只要B,C在一个包中,B就能使用A中从父类继承的protected方法。如果A是B的子类,如果AB不在一个包中,那么A可以使用B中protected方法。

    例如:

    1. package Main;  
    2. import Protected.*;  
    3. public class Main {  
    4.     public static void main(String args[]){  
    5.         Protected jkl=new Protected();  
    6.         jkl.Print();//调用jkl父类的protect方法  
    7.         Frindly prot =new Frindly();  
    8.         System.out.println(prot.a);//在Main类中调用友好型的变量  
    9.         prot.set();//在Main类中调用友好型的方法  
    10.     }  
    11. }  
    12. package Main;  
    13.   
    14. public class Frindly {  
    15.     int a,b,c,d;  
    16.     Frindly(){  
    17.         a=b=c=d=1;  
    18.     }  
    19.     void set (){  
    20.         System.out.print(""+a+" "+b+" ");  
    21.     }  
    22. }  
    23. package Main;  
    24. public class Protectedfather{  
    25.     protected int a;  
    26.     private int b;  
    27.     protected Protectedfather (){  
    28.         this.a=1;  
    29.         this.b=2;//a和b只能在Protected中调用  
    30.     }  
    31.     private void set(){  
    32.         System.out.println(""+a+""+b+" ");  
    33.     }  
    34.     protected void Print(){  
    35.         this.set();//只能在这里用;  
    36.     }  
    37. }  
    38.   
    39. package Protected;  
    40. import Main.*;  
    41. public class Protected extends Protectedfather{  
    42.     public Protected(){  
    43.         super();//在另一个包中调用里父类中的protect构造方法  
    44.         super.a=12;//调用父类的protect变量  
    45.     }  
    46. }  




    Public:

         如果类中的方法或者变量是public,那么就可以在别的类中调用,没有限制(用在夸包)。A带掉用别的包中的B类

    1. package Main;  
    2. import Public.*;  
    3. public class Main {  
    4.     public static void main(String args[]){  
    5.         int a;  
    6.         Public p=new Public();//调用public类中的public方法  
    7.         a=p.a;//调用Public类中的public变量  
    8.         p.set();  
    9.     }  
    10. }  
    11.   
    12. package Public;  
    13.   
    14. public class Public {  
    15.     public int a=12;  
    16.     public void set (){  
    17.         System.out.println("OK ");  
    18.     }  
    19.   
    20. }  



    总结表格::

    同一类

    同包

    不同包

    子类

    非子类

    子类

    非子类

    Private

      否

    友好型

    Protected

    Public


        

  • 相关阅读:
    PAT1066(AVL树)
    判断是对象,还是数组对象
    electron打包成.exe后限制只启动一个应用
    electron启动出现短暂的白屏
    js sort方法根据数组中对象的某一个属性值进行排序
    VUE DIV模拟input框的基本处理
    vue 设置 input 为不可以编辑
    VUE实现限制输入框最多输入15个中文,或者30个英文
    electron 点击事件无效
    electron监听系统托盘,electron是否最小化到系统托盘
  • 原文地址:https://www.cnblogs.com/jpfss/p/8622461.html
Copyright © 2020-2023  润新知