t1.print();
}
}
class test01 {
private int a = 4;
public void print() {
test02 t2 = new test02();
t2.print();
}
class test02 {
int b;
void print() {
System.err.println("a + b=" + (a + b));
}
}
}
public class mytest01 {
public static void main(String[] args) {
test01 t1 = new test01();
t1.print();
}
}
使用外部类来创建内部类的对象,就如同在一个外部类实例中调用一个方法,同时这个方法正好是内部类的方法。下面是一个通过外部类来创建内部类的对象的实例
[java]
class test01 {
private int a = 4;
class test02 {
void print() {
System.err.println("a = " + a);
}
}
}
public class mytest01 {
public static void main(String[] args) {
test01 t1 = new test01();
test01.test02 t2 = t1.new test02();
t2.print();
}
}
class test01 {
private int a = 4;
class test02 {
void print() {
System.err.println("a = " + a);
}
}
}
public class mytest01 {
public static void main(String[] args) {
test01 t1 = new test01();
test01.test02 t2 = t1.new test02();
t2.print();
}
}
方法内部类对外面的所有类来说都是隐藏的,仅有它所在的方法知道它;它不仅可以访问它所属外部类中的数据,还可以访问局部变量,不过局部变量必须声明为final类型。下面是实现方法内部类的定义实例:
[java]
class test01 {
private String a = "这是一个方法内部类";
void print() {
class test02 {//定义一个方法内部类
public void print() {
System.err.println(a);
}
}
}
}
class test01 {
private String a = "这是一个方法内部类";
void print() {
class test02 {//定义一个方法内部类
public void print() {
System.err.println(a);
}
}
}
}
下面的实例是在外部类的方法内创建内部类的对象:
[java]
class test01 {
private String a = "这是一个方法内部类";
void print() {
String b = "这是一个局部变量";
class test02 {//定义一个方法内部类
public void print() {
System.err.println(a);
System.err.println(b);
}
}
test02 t2 = new test02();
t2.print();
}
}
class test01 {
private String a = "这是一个方法内部类";
void print() {
String b = "这是一个局部变量";
class test02 {//定义一个方法内部类
public void print() {
System.err.println(a);
System.err.println(b);
}
}
test02 t2 = new test02();
t2.print();
}
}
上面的代码会在System.err.println(b);这一行报错,但如果在String b = “”前面加上final,就会正确。
3)、匿名内部类
匿名内部类比较怪异,内明内部类也就是没有名字的内部类。下面是一个定义内部类的方法:
[java]
class test01 {
public void print(){
System.err.println("这是一个类类型的匿名内部类");
}
}
class test02 {
test01 t1 = new test01() {//定义了一个匿名内部类
public void print() {
System.err.println("这个子类重写了父类的方法");
}
};
void print1() {
t1.print();
}
}
public class mytest01 {
public static void main(String[] args) {
test02 t2 = new test02();
t2.print1();
}
}
class test01 {
public void print(){
System.err.println("这是一个类类型的匿名内部类");
}
}
class test02 {
test01 t1 = new test01() {//定义了一个匿名内部类
public void print() {
System.err.println("这个子类重写了父类的方法");
}
};
void print1() {
t1.print();
}
}