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
  • 相关阅读:
    各种排序(二)
    各种排序(一)
    【游记】CSP-S2019游记
    【题解】hdu1506 Largest Rectangle in a Histogram
    【题解】CF161B Discounts
    【CSP-S膜你考】我们的可可西里
    Bzoj3675 [Apio2014]序列分割
    Bzoj3853 GCD Array
    Bzoj3876 [Ahoi2014]支线剧情
    Bzoj2324 [ZJOI2011]营救皮卡丘
  • 原文地址:https://www.cnblogs.com/Hermioner/p/9482342.html
Copyright © 2011-2022 走看看