java方法重写问题

2025-06-28 06:25:31
推荐回答(1个)
回答1:

匿名内部类
下面的例子看起来有点奇怪:
//: c08:Parcel6.java
// A method that returns an anonymous inner class.
public class Parcel6 {
public Contents cont() {
return new Contents() {
private int i = 11;
public int value() { return i; }
}; // Semicolon required in this case
}
public static void main(String[] args) {
Parcel6 p = new Parcel6();
Contents c = p.cont();
}
} ///:~
cont()方法将下面两个动作合并在一起:返回值的生成,与表示这个返回值的类的定义!
进一步说,这个类是匿名的,它没有名字。更糟的是,看起来是你正要创建一个 Contents
对象:
return new Contents()
但是,在到达语句结束的分号之前,你却说:“等一等,我想在这里插入一个类的定义”:
return new Contents() {
private int i = 11;
public int value() { return i; }
};
这种奇怪的语法指的是:“创建一个继承自 Contents 的匿名类的对象。”通过 new 表达
式返回的引用被自动向上转型为对 Contents 的引用。匿名内部类的语法是下面例子的简
略形式:
class MyContents implements Contents {
private int i = 11;
public int value() { return i; }
}
return new MyContents();
在这个匿名内部类中,使用了缺省的构造器来生成 Contents。