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

2014-11-24 11:52:32 · 作者: · 浏览: 75

public class mytest01 {

public static void main(String[] args) {

test02 t2 = new test02();

t2.print1();

}

}


在匿名内部类中必须重写父类的方法,同时也可以定义自己的方法。但是匿名内部类怎么调用自己的方法呢?父类不知道关于子类中新的方法的任何内容。因此,当在匿名内部类引用上调用父类中没有的方法,编译器将会报错。下面是一个关于在匿名内部类中调用不到父类原方法而产生的错误:

[java]
class test02 {

test01 t1 = new test01() {//定义了一个匿名内部类

public void print() {

System.err.println("这个子类重写了父类的方法");

}

Public void prt(){

System.out.println(“这是匿名内部类自己的新方法”)

}

};

void print1() {

t1.print();

}

}

class test02 {

test01 t1 = new test01() {//定义了一个匿名内部类

public void print() {

System.err.println("这个子类重写了父类的方法");

}

Public void prt(){

System.out.println(“这是匿名内部类自己的新方法”)

}

};

void print1() {

t1.print();

}

}


上面的代码将会在prt()方法中报错。

匿名内部类是指创建父类类型的匿名子类,而接口类型的匿名内部类是指创建接口类型的匿名类,这个类必须实现这个接口。

[java]
interface Useing {//定义了一个接口

public void print();

}



class test01 {

Useing useing = new Useing() {//接口类型的匿名内部类

@Override

public void print() {

System.err.println("这是一个接口类型的匿名内部类");

}

};

void print() {

useing.print();

}

}

public class mytest01 {

public static void main(String[] args) {

test01 t = new test01();

t.print();

}

}

interface Useing {//定义了一个接口

public void print();

}

class test01 {

Useing useing = new Useing() {//接口类型的匿名内部类

@Override

public void print() {

System.err.println("这是一个接口类型的匿名内部类");

}

};

void print() {

useing.print();

}

}

public class mytest01 {

public static void main(String[] args) {

test01 t = new test01();

t.print();

}

}


下面的程序中,利用接口的形式进行对象的传递。先定义一个类test01,该类中定义了一个方法print()。在方法print()中又定义了一个内部类,接着对这个内部类进行实例化,通过类的实例调用自己的带参数的方法。这个参数是 一个能实现接口book中的抽象方法的一个实例,然后在这个类重写这个方法。下面是一个实例:

[java]
interface Book {//定义了一个接口

public void print();

}



class test01 {

void print1(){

class good {

void print2(Book b) {}

}

good g = new good();

g.print2(new Book() {

@Override

public void print() {

System.err.println("这是一个参数");

}

});

{

System.err.println("这是一个带参数的匿名内部类");

}

}

}

public class mytest01 {

public static void main(String[] args) {

test01 t = new test01();

t.print1();

}

}

interface Book {//定义了一个接口

public void print();

}

class test01 {

void print1(){

class good {

void print2(Book b) {}

}

good g = new good();

g.print2(new Book() {

@Override

public void print() {

System.err.println("这是一个参数");

}

});

{

System.err.println("这是一个带参数的匿名内部类");

}

}

}

public class mytest01 {

public static void main(String[] args) {

test01 t = new test01();

t.print1();

}

}