1、abstractide
一、abstract 能够修饰类和方法(构造方法不行),分别叫作抽象类和抽象方法;spa
二、抽象类中能够没有抽象方法(通常无心义,抽象类中应该拥有抽象方法),而拥有抽象方法的类必须被声明为抽象类;对象
继承抽象类的子类也能够是抽象类,这样的抽象子类能够对基类中的抽象方法进行重写也能够不进行重写,通常不进行重写(除非要在抽象子类内部调用这个重写的方法,可经过这个抽象子类的非抽象子类的对象调用继承于抽象子类中重写的方法。有点绕啊,不过是个小技巧^_^)。抽象子类中也能再次声明父类的抽象方法,只是这样作没有任何意义,正常人不会这样作^_^);继承
定义的抽象类能够不被继承,若被继承且该抽象类中又有抽象方法,则继承该抽象类的非抽象子类必须重写父类的抽象方法。固然咱们一般指望:抽象类中应该有抽象方法,抽象类应该被继承而且其中的抽象方法必定要被非抽象的子类重写!变量
三、抽象类不能被实例化。 抽象类的父类能够是非抽象类,但通常状况下,这样的继承关系不经常使用。权限
四、抽象方法只需声明,无需实现(即不用写大括号和大括号内的东西)。技巧
2、final引用
一、final 能够修饰成员变量、局部变量、方法(构造方法不行)和类;方法
二、final 修饰的变量不能被更改!final 修饰的成员变量必定要初始化(注意:声明成员变量时不使用final是能够不初始化变量的,系统会给其相应类型的默认值;可以修饰局部变量的关键字只有 final ,不管有无 final 修饰,声明某个局部变量时,能够不赋值,但使用此局部变量时则必定要先将其初始化);static
三、final 修饰的方法能够被继承,但不能被子类重写;
四、final 修饰的类不能被继承。
3、static
一、static 能够修饰成员变量和方法(构造方法不行);
二、被 static 修饰的变量或者方法独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。
三、在类被加载的时候,就会去加载被 static 修饰的部分。被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕以后,即使没有建立对象,也能够用类名去访问(固然您也能够用具体的对象去访问,但咱们使用 static 是但愿直接用类名去访问)。
四、static 修饰的方法能够被继承,但不能被子类重写;static 不能修饰子类中须要重写的方法(final能够修饰)。
五、父类如有 static 修饰的方法,子类也拥有 static 修饰的一样返回值和同名的方法时,子类的此方法将隐藏(hide)父类的静态方法。这两个方法不存在多态特性,具体调用哪一个方法是根据引用的类型来肯定,而不是以实际对象来肯定, 这一点和子类中定义的非父类的成员变量和没有重写的新方法相像。
六、在同一个类里,静态的上下文中(静态方法内部)只能访问静态的属性(这里的“静态的属性”是指使用 static 修饰的属性),若要访问非静态的属性则须要 new 一个自身对象来访问;非静态上下文(非静态方法)既能够访问非静态的属性,也能够访问静态的属性。(注:不一样类之间属性的访问,要么使用类名 . 属性来访问静态的属性,要么使用对象引用 . 属性来访问全部属性。固然,前句提到方法受到权限修饰符的限制,如 private 修饰的属性,不一样的类是不能经过上述方法访问的)。
小贴士:从上可看出, abstract 不能与 static 或 final 一块儿修饰某个方法;
若在一个抽象父类中使用 abstract 声明了一个抽象方法,而继承的任何子类(包括抽象子类)都须要重写这个方法,则不能使用 static 来修饰重写的方法,但可使用 final 来修饰子类须要重写的方法;
static 和 final 能够一块儿修饰某个不须要重写的方法。