`

Java基础恶补——内部类

    博客分类:
  • Java
 
阅读更多

[SCJP Sun Certified Programmer for Java 6 Study Guide (Exam 310-065)]  chapter8

 

一. 内部类
1. 1个"regular"内部类是定义在另1个类里面、且又在该类的任何方法或其他代码之外的类。

2. 1个内部类是它的外部类的成员,可以用任何可以用来修饰成员的访问限定修饰符,如 abstract 或 final。

3. 1个内部类实例可以访问它所在的外部类的所有成员,包括 private 成员。

4. 实例化内部类

1) 实例化1个内部类时,必须首先持有1个它所在的外部类的实例的引用。

2) 在1个内部类所在的外部类中实例化该内部类时,只需要使用内部类的名称即可,如:

MyInner mi = new MyInner();

3) 在1个内部类所在的外部类的外部实例化该内部类时,需要同时使用外部类、内部类的名称,如:

MyOuter mo = new MyOuter();
MyOuter.MyInner inner = mo.new MyInner();

5. 在1个内部类里,this 表示内部类本身,外部类名.this  表示外部类。

 

二. 方法中的内部类
1. 1个method-local内部类是定义在1个方法里面的。

2. 使用method-local内部类前,必须先实例化,创建实例的代码的位置是:该方法内、该内部类定义外。

3. method-local内部类里可以使用该方法所在的类的成员,但不能使用在该方法中定义的变量,除非这些变量是 final 的。

4. method-local内部类能使用的访问限制修饰符只有 abstract 或 final。

 

三. 匿名内部类
1. 匿名内部类是没有名字的,type must be either a subclass of the named type 或其实现的类的名字。

2. An anonymous inner class is always created as part of a statement; don't forget to close the statement after the class definition with a curly brace. This is a rare case in Java, a curly brace followed by a semicolon.

3. Because of polymorphism, the only methods you can call on an anonymous inner class reference are those defined in the reference variable class (or interface), even though the anonymous class is really a subclass or implementer of the reference variable type.

4. 1个匿名内部类可以扩展1个类或实现1个接口,但不能同时既扩展1个类又实现1个接口,也不能同时实现1个以上的接口。

5. An argument-defined inner class is declared, defined, and automatically instantiated as part of a method invocation. The key to remember is that the class is being defined within a method argument, so the syntax will end the class definition with a curly brace, followed by a closing parenthesis to end
the method call, followed by a semicolon to end the statement: });

 

四. 静态内嵌类

1. 静态内嵌类是使用 static 修饰符的内部类。

2. 1个静态内嵌类不是内部类,而是1个 top-level nested class。

3. 因为是静态的,所以它不能使用它所在的外部类的实例成员,实例化1个静态内嵌类时不需要持有1个它所在的外部类的实例的引用。

4. 实例化1个静态内嵌类既需要外部类名、也需要内部类名,如:BigOuter.Nested n = new BigOuter.Nested();

5. 1个静态内嵌类不能访问它所在的外部类的非静态成员,因为它不持有它所在的外部类的实例的引用,换句话说,它不具有1个 outer this reference.

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics