java类修饰词和内部类详解

java类修饰词和内部类详解
控制属性:
同一类内 同一包内 子类 所有类
public 可 可 可 可
protected 可 可 可 不可
default 可 可 不可 不可
private 可 不可 不可 不可
注:当成员声明为private时,内部类也不可访问外部类的私有成员。

abstract:
1.修饰类、接口、成员方法。不管是否被abstract修饰,接口总是有抽象属性。
2.若修饰类,则该类不能生产实例。
3.抽象方法只能在抽象类或接口中定义,不能再飞抽象类中定义;抽象方法只被定义而不实现,即不含方法体。
4.抽象类的子类和实习接口的类:若为非抽象类,则在定义时必须覆盖其父类或接口内的所有抽象方法;若为抽象类,则可以覆盖部分或者不覆盖。

fianl:
1.修饰非抽象的类、类或接口的成员域和类的非抽象的成员方法。
2.若修饰类,则该类不能派生出子类。
3.若修饰成员域,a.若成员域还被static修饰,则成员域只能在定义时赋值,而且之后不能修改;b.若只被final修饰而未被static修饰,则该成员域只能在定义时或构造方法中赋值,而且只能赋值一次之后不能修改。
4.若修饰成员方法,则该方法不能被子类覆盖。


static:
1.同一类内,静态成员方法不能直接(即不通过类名)引用本类的非静态成员变量和非静态成员方法,但可直接引用静态成员。
2.所有实例共用一个静态成员变量,即在一个实例中对静态成员变量修改,其他实例中的静态成员变量也同时 被系统修改。
3.静态成员可通过类名和实例名两种方法访问。
4.static可修饰实名内部类,但不可修饰普通类(即与内部类相对应的外部类)和匿名内部类。
5.实名内部类若包含静态成员方法,则该类必须声明为静态类内部类;若非静态实名内部类包含静态成员变量(即静态成员域),则该静态成员变量还需声明为final属性。


inner class(内部类):
1.分为实名内部类(有类名)和匿名内部类(没有类名)。实名内部类除了声明为static时用法与普通类不同,其他用法相似;匿名内部类不能用static和abstract修饰,不能包含静态成员方法,不能派生出子类,实名内部类均可以。实名内部类还可被private和protected修饰。
2.实名内部类:
a.在自己或者外部类中定义实例:实名内部类名 实例名;在外部类之外的类中定义实例:外部类名.实名内部类名 实例名;。
b.创建静态实名内部类的实例对象:new 外部类名.内部类名(构造方法参数列表);创建非静态实名内部类的实例对象:外部类实例名.new 实名

内部类名(构造参表);若在自己或者外部类中定义,则上面的外部类名可以省略。
c.实名内部类(静态或非静态的)的静态成员的访问方式:外部类名.实名内部类名.静态成员名;或者 内部类实例名.成员名;。
非静态成员:内部类实例名.成员名;。
3.内部类可多重嵌套定义。

相关文档
最新文档