问题就是匿名内部类,没有类名,如何写其同名构造函数,如何初始化。
有一点你必须要弄清楚,要实例化一个匿名类对象,至少要知道你要实例化的匿名类对象的父类(可以是普通类,也可以是抽象类,还可以是接口.)的名字叫什么,这样才可以实例化一个匿名类对象.另外,匿名类对象在实例化时,根本不可以写自己的构造方法,只能在实例化时调用父类的构造方法.但是匿名类对象在实例化时,是可以重写父类的方法的,可以通过父类引用调用到子类的重写后的方法.不过,匿名类对象在实例化时虽然也可以写属于匿名类自己的方法,不过,根据多态原则,不可以使用父类引用调用只属于子类(就是这个匿名类)的方法.
你必须要有一个觉悟,那就是:匿名类只是某个类或接口的子类,所以要初始化匿名类,就肯定要先知道某个类或某个接口的名字.
好了,说了这么多,用代码给你演示:
public class Init {
public static void main(String[] args) {
// 这就是初始化匿名内部类的方式
Tools tools = new Tools("你现在看到的是子类对象的构造方法,也就是你想要的匿名类对象.") {
/**
* 此方法是重写的父类的方法,所以可以使用父类引用调用到此方法.
*/
@Override
void fun() {
System.out.println("子类重写fun()方法");
}
/**
* 此方法是只属于子类的方法,根据多态原理,
*
* 用父类引用是调用不到此只属于子类的方法的,但是写出来也不会报错,运行时也不会出错.
*/
@SuppressWarnings("unused")
public void print() {
System.out.println("子类自己的方法");
}
};
// 调用tools对象的fun()方法
tools.fun();
}
}
class Tools {
public Tools(String name) {
System.out.println(name);
}
void fun() {
System.out.println("fun");
}
}
你要还看不懂,我也没办法了.
现在教你如何写同名构造方法 |