Java 访问权限修饰符(access specifier)

关于java中的访问权限控制符,在网上总看到有以下总结:
作用域        当前类    同一package   子孙类    其他package

public         √           √          √           √

protected      √           √          √           ×

friendly       √           √          ×           ×

private        √           ×          ×           ×

这样的描述对于其中的public 和 private 没有问题,而对于friendly和protected却不太清晰,容易产生歧义。下面举个例子分别说明:
package com.a
public class Supper{
   protected void f(){}
   void g(){}
}

package com.a
public class Sub extends Supper{
   public void m(){
   f();  // ok
   g();  // ok
   }
}

package com.b
public class Sub2 extends Supper{
   public void x(){
   f();// ok
   g();// deny
   }
}

也就是说,protected和friendly最主要的区别在于父类和子类是否在同一个package内。如果在同一个package内,protected 和 friendly 作用域一样;如果不在同一个package,则protected 和 friendly有区别,protected的方法可以被子孙类访问,而friendly不能。

你可能感兴趣的:(java,F#,Access)