java中4个访问修饰关键字的使用方法(pbulic、protected、default、private)

java中类内的方法前有四类修饰符号:public、protected、default、private,用来限制方法的使用范围。网上四个修饰符的使用范围如下表所示:

修饰符号     当前类   同一包内   子孙类  其他包内  (Y 表示可以访问,N表示不可以访问)

public              Y            Y            Y              Y

protected       Y             Y            Y               N

default           Y              Y            N             N

private            Y             N            N             N

 这个表很直白的告诉了我们结果,但是却没有详细解释,我在学习这张表示产生了以下几个疑问:

1. 如果当前类中有函数的入口public static void main(String args[]), main函数是否能访问所在类中用protected、default、private修饰的方法?

答:main可以访问其所在类中被public、protected、default和private修饰的方法。

public class Basic {
	public Basic()
	{
		System.out.println("test construction method");
	}
    public void test_public()
    {
    	System.out.println("test_public");
    }
    private void test_private()
    {
    	System.out.println("test_private");
    }
    protected void test_protected()
    {
    	System.out.println("test_protected");
    }
    void test_default()
    {
    	System.out.println("test_default");
    }
   private static void test_
   public static void main(String[] args) {
      Basic b = new Basic();
      b.test_public();
      b.test_protected();
      b.test_default();
      b.test_private();
	}
}

2. 不同包内是什么含义?

package Algorithm;//Basic3属于Algorithm包

import Basic.Basic;//类Basic属于Basic包,即类Basic和类Basic属于不同的包

public class Basic3 
{
   public Basic3()
   {
       Basic b = new Basic();
       b.test_public();//只有Basic中的public方法可以被访问,其他3个修饰符限定的方法都不能被访问。
   }
   public static void main(String arg[])
   {
	   Basic3 b = new Basic3();
   }
}

3.子孙类中可以访问的含义是什么?

扫描二维码关注公众号,回复: 4745006 查看本文章

子类只能调用父类中使用public、protected修饰的方法,default和private修饰的方法不能调用。

package Algorithm;

import Basic.Basic;

public class Basic3 extends Basic
{
   public Basic3()
   {
       super.test_protected();
       test_public();//可以不使用关键字 super
   }
   public static void main(String arg[])
   {
	   Basic3 b = new Basic3();
   }
}

猜你喜欢

转载自blog.csdn.net/cleanarea/article/details/79838964