Java――类的应用(二) (五)

2014-11-24 11:52:32 · 作者: · 浏览: 74
test01 t1 = new test01();

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();

}

}