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