1.接口
    接口是描述一个对外公布的方法签名,所有的对象都能访问到,因此它的属性和方
法不能违背接口的这个本质概念。所以接口的属性强制为public static final
修饰的,为常量;接口方法强制为public abstract。任何手动设置这几个修饰符,必
须满足这个条件,如果和这几个修饰符冲突,则报错。如果没有设置其中的一个或多个
修饰符,它的修饰符也是这几个。也就是说,无认你怎么设置,只要没报错,那么最终
,接口的属性都是由public static final修饰,方法都是由public abstract修饰。
    接口是为了给别的具体类来实现的,它是对方法集合的一种抽象。因此接口本身强
制被abstract修饰。无论你写了还是没写abstract,它都是被abstract修饰的。
    接口只允许被public,abstract被用来修饰,public可以没有,则接口的访问属性
为默认default。

2.外部类
    如果类中有抽象方法,则这个类必须被声明为抽象类。抽象类不能被实例化。
    内部类就和类属性一样,有各种访问控制符。
    外部类只允许被public,abstract,final修饰。public可以没有,则外部内的访问
属性是默认default。abstract表示它是一个抽象类,不能被实例化。final表示它是一
个最终类,不能被继承。

3.内部类
    可以很好地实现隐藏。外部类,是不允许有private和protected权限的,但内部类
可以。
    内部类拥有它所在外部类所有元素的访问权限。
    可以实现多重继承(内部类存在的最大理由之一)
    可以避免修改接口而实现同一个类中两种同名方法的调用

4.总共有4种访问权限:
  作用域:  当前类  同一包  子孙类  其它包
  private          是          否         否           否  
  default          是          是         否           否
  protected     是          是         是           否
  public           是          是         是           是

4.其它
    接口和外部类只有两种访问权限:public,default。任何不是这两种访问属性的都
报错。
    变量允许的修饰符:public,protected,private,static,final,transient,
volatile。
    方法允许的修饰符:public,protected,private,abstract,final,static,
synchronized,native。
    abstract不能和private,final,static共用,因为它们表示的意义互相矛盾。
    主入口函数public static void main(String[] args)除了参数名字可以改之外,
其它都不能更改,否则不是主入口函数,变为普通函数。

    static                     静态变量
    final                       不可修改
    abstract                抽象  
    transient              序列化时,告诉编译器此变量不需要持久保存
    volatile                 保证多线程正确处理此变量
    native                   修饰的方法在类中没有实现,JNI使用
    synchronized     多线程锁锁机制支持