说明:这是2007年复习SCJP期间的学习笔记(JavaSE 5.0),有部分遗失。现在整理一下发到Blog上,一方面做个备份,另一方面分享出来,希望对需要的人有用。
------------------------
第八章 内部类
1、从外部类代码内部实例化内部类:
class MyOuter{
public
void outer(){
MyInner in=new MyInner();//像实例化普通类一样。
in.inner();
}
class
MyInner{
Public void iner(){}
}
}
2、从外部类外部实例化内部类:
Public static
void main(String[] args){
MyOuter out=new MyOuter(); //先获得外部类实例。
//使用外部类实例创建内部类,注意内部类返回类型为:外部类.内部类
MyOuter.MyInner in=out.new MyInner();
in.inner();
}
也可以这样写:MyOuter.MyInner in=new MyOuter().new MyInner();
//先实例化外部类再实例化内部类。
3、
实例化内部类是唯一一种在实例上调用new构造实例的方法。
4、
内部类代码内引用:
引用自己:this
引用外部类:外部类.this à MyOuter.this
5、
方法中的内部类不能使用方法内的局部变量,除非该变量为final.
内部类可以直接使用外部类的成员属性,即使它声明为private.
方法中的内部类只能声明为abstract或final.
如果内部类是在静态方法内,那么该内部类只能访问外部类的static成员.
6、
指定类类型的匿名内部类:
class A{
public void display(){
System.out.println(“a”);
}
}
class B{
A a=new A(){
//a是一个匿名内部类实例,继承A类并重写了display()方法。
public void display(){
System.out.println(“b”);
}
}; //注意匿名内部类引用结尾
}//上面的代码并未在方法内,相当于声明和初始化。
7、 指定接口类型的匿名内部类:
interface A {
abstract public void display(); }
class B{
A a=new A(){
//实现接口A的匿名内部类,必须实现A中所有方法。
public void display(){
System.out.println(“b”);
}
}; //注意
}
匿名内部类只能实现一个命名类或者单个接口。
8、
参数定义的匿名内部类:
interface Foo{
abstract public void myFoo();
}
class Bar{
public void doStuff(Foo f){}
}
class
InParamter{
void go(){
Bar b=new Bar();
b.doStuff(new Foo(){ //一个实现了Foo接口的匿名内部类,作为参数。
public void myFoo(){
System.out.println(“in paramter”);
}
});
//注意
}
}
9、
静态嵌套类:
在外部类内部使用:
class MyOuter{
static class
MyInner{ void go(){System.out.println(“go”);}}
public static
void main(String[] args){
MyInner in=new MyInner(); //像普通类一样实例化。
in.go();
}
}
在外部类外部使用:
class MyOuter{
static class
MyInner{ void go(){System.out.println(“go”);}}
}
class Foo{
public static void
main(String[] args){
MyOuter.MyInner in=new MyOuter.MyInner(); //静态嵌套类
//注意new时未使用外部实例,外部类后无()。
//与内部类实例化不同,此处不能用外部实例创建对象引用。
in.go();
}
}
10、静态嵌套类不访问外部的非static实例变量和方法,静态嵌套类能声明和定义非static成员。
11、方法内定义的内部类调用时需用匿名子类实例化,并可以像普通内部类一样直接访问外部类成员。
12、可以为内部类创建匿名子类。
public class Foo{
class Bar{
public void myBar(){System.out.println(“my
bar”);}
}
public static void
main(String[] args){
(new Bar(){}).myBar();
//先创建了一个Bar的匿名子类,但没有重写myBar()方法。然后调用myBar()方法。
}
}
13、常规内部类可以声明为public\final\abstract\private\protected\static\Strictp。
如果内部类声明为abstract则需要实例化该内部类的具体子类。
分享到:
相关推荐
scjp笔记 考过scjp的学生的第一手资料 强烈推荐
SCJP1.4考试笔记 SCJP中容易忽略的细节笔记 SCJP 陷阱大全 SCJP 阅读笔记 ……
SCJP复习笔记,其中有复习SCJP过程中的一些问题供大家分享
SUN SCJP 认证笔记。
SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题SCJP试题
scjp模拟器scjp模拟器scjp模拟器 希望对大家有用 谢谢
SCJP
以前参加SCJP认证考试的时候的学习笔记,我95分通过,这里面是我记录的一些心得。
Garfield 的 SCJP 阅读笔记.doc
精心整理的一套SCJP阅读笔记,方便其它朋友参考学习。
这个 Whizlabs 的卷子整体很有难度,希望scjp考试不要有这么复杂. 在这个scjp5中大量考了jdk1.5 的新特性,有些甚至是在实践中很少用到的. 以往认为欧美应该比较务实, 倾向于考核能力. 没想到在这些代码中依然...
我的培训机构给我们已过师兄的笔记,希望能对大家有帮助...
SCJP试题,SCJP试题,SCJP试题,SCJP试题,SCJP试题
在准备SCJP考试时,整理的一些知识总结。有示例源代码,有分析。
SCJP模拟真题SCJP模拟真题SCJP模拟真题
SCJP考题和学习笔记
SCJP典型试题1000例 SCJP典型试题1000例 SCJP典型试题1000例
scjp题库scjp题库scjp题库scjp题库scjp题库scjp题库scjp题库scjp题库scjp题库scjp题库
本人在学习SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055)过程中,对里面的每一个目标进行了翻译总结,希望能给英文不是很好的人提供一些帮助,前几章很简单,所以就统计了后五章
scjp