zoukankan      html  css  js  c++  java
  • 01. Java基础之访问权限

             Java的访问权限就四种,public > 包访问权限(默认访问权限)> protected > private。用一张表来总结各个权限的用法:

    Access Levels
    ModifierClassPackageSubclassWorld
    public Y Y Y Y
    protected Y Y Y N
    no modifier Y Y N N
    private Y N N N

    class代表的当前类,pckage代表的当前包,subclass代表子类,world代表除开前三种情况的其它情况。

    解释:

    (1)public:任意访问

    (2)protected:可以当前类;同包中的所有类;不同包的子类都可以调用父类中的protected修饰的方法或者变量;  但是不同包,只可以用子类来访问父类的Protected,  却不可以用父类本身来访问Protected,除非加super来调用父类。

     1 package com.test.b;
     2 
     3  public class A{    
     4     public A() {  
     5         System.out.println("A construtor");
     6     }
     7     protected void f()
     8     {
     9         System.out.println("A.f()");
    10     }
    11     
    12 }
    13 
    14 
    15 package com.test.c;
    16 
    17 import com.test.b.A;
    18 
    19 public class B extends A{
    20     
    21     public void test()
    22     {
    23         super.f();//ok
    24         A a=new A();
    25         f();//OK
    26         a.f();//编译错误,无法跨包用父类的对象访问Protected
    27     }
    28     public static void main(String args[])
    29     {
    30         
    31         
    32     }
    33 
    34 }
    View Code

    (3)no modifier:默认是包访问权限。就是只有本包的所有类才可以访问这个类中的数据或方法。

    (4)private:只有当前类才有资格访问变量或者方法。

     note1:父类的构造器如果是private的,那么子类的对象无法创建成功的。因为子类对象创建的时候会默认调用父类构造函数。

     1 package com.test.a;
     2 
     3 public class A {
     4    private A()
     5    {
     6        System.out.println("A constructor");
     7    }
     8 }
     9 
    10 
    11 package com.test.a;
    12 
    13 public class C extends A{
    14     public C()
    15     {
    16         //默认是会调用父类的构造器,但是父类的构造器是private,因此子类也会compile error
    17     }
    18 
    19 }
    View Code

    note2:父类的private方法和属性不能被子类访问,也不能在子类中被访问

     1 package com.test.a;
     2 
     3 public class A {
     4   private int m=3;
     5   private void f()
     6   {
     7       System.out.println("A.f()");
     8   }
     9 }
    10  
    11 
    12 package com.test.a;
    13 
    14 public class C extends A{
    15     public static void main(String args[])
    16     {
    17         A a=new A();
    18         System.out.println(a.m);//编译错误。
    19         System.out.println(a.f());//编译错误
    20         C c=new C();
    21         System.out.println(c.m);//编译错误
    22     }
    23 }
    View Code
  • 相关阅读:
    windows下Yarn安装与使用(两种方法)
    git配置公钥---解决码云出现git@gitee.com: Permission denied (publickey)
    npm使用国内镜像的两种方法
    【LeetCode】33. Search in Rotated Sorted Array (4 solutions)
    【LeetCode】83. Remove Duplicates from Sorted List
    【LeetCode】82. Remove Duplicates from Sorted List II
    【LeetCode】85. Maximal Rectangle
    【LeetCode】84. Largest Rectangle in Histogram
    【LeetCode】87. Scramble String
    【LeetCode】162. Find Peak Element (3 solutions)
  • 原文地址:https://www.cnblogs.com/Hermioner/p/9482342.html
Copyright © 2011-2022 走看看