Java 访问修饰符使用规则
作用域 | 当前类 | 同一package | 子孙类 | 其他package |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
friendly | √ | √ | × | × |
private | √ | × | × | × |
1. 对于类:
类如果不写修饰符,默认是 friendly 的。Java 中并没有 friendly 修饰符的声明。
friendly 类型说明子类如果和此类不在同一包中是不可见的,简单说就是只有同一包中才可见。
protected 类型说明同一包中一定可见,但不同包中的子孙类中也可见,所以和 friendly 有区别。
普通类不可以用 private 和 protected 来修饰,但内部类可以。
- 内部类的详细解释请看这篇文章:http://lavasoft.blog.51cto.com/62575/179484/
内部类的简单总结:
- 内部类的分类:
- 普通内部类
- 方法内部类 (只存在于某个方法中)
- 匿名类,比如 new Thread(){}
- 静态内部类,static class,它不能访问外部类的非静态成员。要创建静态内部类对象时候,也不需要外部类对象了,直接可以 new 外部类名.内部类构造方法
- 接口内部类
-
public interface AInterface { void readme(); //接口内部类默认是 static 的 class Inner1 implements AInterface { public void readme() { System.out.println("我是一个接口内部类"); } } } class Main { public static void main(String[] args) { AInterface.Inner1 in1 = new AInterface.Inner1(); in1.readme(); } }
-
- 内部类的特点:
- 内部类可以是 public,private 或 protected 的。
- 内部类可以直接访问外围类的成员和方法。
- 创建内部类:
Outer outer = new Outer();
//不可以直接Outer.new Inner();因为不是静态的 Outer.Inner iner = outer.new Inner()
2. 对于类(普通类和抽象类)方法和属性:默认是 firendly 的。
3. 对于接口:属性,public static final
方法,public abstract
移动开发者