嗯,现在明白 了,谢谢。作者: 英雄传说ER 时间: 2014-10-12 20:52
我们从最后一个问题开始解决, WeekDay是一个抽象类对吧——“public abstract class WeekDay”最开始的定义
“抽象类是不能实例化的 换句话说抽象类是不能创建对象的” 这个你知道吧
那么为什么可以new WeekDay呢,因为这里new的不是说WeekDay的实例化对象 而是WeekDay的一个子类 ,这不过这个子类没有名字,只有一个方法,而且这个方法覆盖了父类方法,如果觉得复杂我给你举个例子吧,我简单些,不那么规范了
第一步 class FU
{ fangfa(){} }
class ZI_1 extends FU
{ fangfa(){ daima1 } }class ZI_2 extends FU
{ fangfa(){ daima2 } }
...很多个子类 FU类里面只有一个抽象方法,引用时没有任何意义的,子类方法覆盖父类方法,
如果主函数里面要引用子类的方法,由于父类不能实例化,所以只能创建子类对象
FU obj = new ZI_1();obj.fangfa()这里懂了那么
第二步 这个子类可以写到FU类里面 作为内部类 这没有任何问题吧
class FU
{ class ZI_1 /* extends FU */内部类会隐示的继承外部类
{ fangfa() { daima1 } }
fangfa(){}
}
第三步 如果只引用一次子类的方法 那么还要单独写一个类是不是很麻烦 这样就产生了匿名内部类
class FU
{
new FU(){ fangfa() { daima1 } } 若前面有变量名字 那么这个名字是这个(匿名子类的对象)的名字,也就是说子类没名字,但它的对象有名字
fangfa(){}
}