先看下面这个代码:
interface Monster {
void menace();
}
interface DangerousMonster extends Monster {
void destroy();
}
interface Lethal {
void kill();
}
interface Vampire extends DangerousMonster, Lethal {
void drinkBlood();
}
class DragonZilla {
public DangerousMonster getDangerousMonster() {
return new DangerousMonster(){//匿名类实现DangerousMonster接口
public void menace() {
System.out .println("DangerousMonster.menace");
}
public void destroy() {
System.out .println("DangerousMonster.destroy");
}
};
}
}class VeryBadVampire {
public Vampire getVampire(){
return new Vampire(){//匿名类实现Vampire接口 public void drinkBlood() {
System.out .println("Vampire.drinkBlood");
}
public void destroy() {
System.out .println("Vampire.destroy");
}
public void menace() {
System.out .println("Vampire.menace");
}
public void kill() {
System.out .println("Vampire.kill");
} };
}
}public class HorrorShow {
static void u(Monster b) { b.menace(); }
static void v(DangerousMonster d) {
d.menace();
d.destroy();
}
static void w(Lethal l) { l.kill(); }
public static void main(String[] args) {
DragonZilla dz = new DragonZilla();
DangerousMonster barney=dz.getDangerousMonster();
u(barney);
v(barney);
VeryBadVampire vampire = new VeryBadVampire();
Vampire vlad=vampire.getVampire();
u(vlad);
v(vlad);
w(vlad);
}
}
我用两个匿名类实现两个接口,我编译运行都没问题,
现在你按我说的去做会发现一个问题,
1先编译上面的代码->2把代码变成如下:
interface Monster {
void menace();
}
//interface DangerousMonster extends Monster {
//void destroy();
//}
interface Lethal {
void kill();
}
//interface Vampire extends DangerousMonster, Lethal {
//void drinkBlood();
//}
class DragonZilla {
public DangerousMonster getDangerousMonster() {
return new DangerousMonster(){//匿名类实现DangerousMonster接口
public void menace() {
System.out .println("DangerousMonster.menace");
}
public void destroy() {
System.out .println("DangerousMonster.destroy");
}
};
}
}class VeryBadVampire {
public Vampire getVampire(){
return new Vampire(){//匿名类实现Vampire接口 public void drinkBlood() {
System.out .println("Vampire.drinkBlood");
}
public void destroy() {
System.out .println("Vampire.destroy");
}
public void menace() {
System.out .println("Vampire.menace");
}
public void kill() {
System.out .println("Vampire.kill");
} };
}
}public class HorrorShow {
static void u(Monster b) { b.menace(); }
static void v(DangerousMonster d) {
d.menace();
d.destroy();
}
static void w(Lethal l) { l.kill(); }
public static void main(String[] args) {
DragonZilla dz = new DragonZilla();
DangerousMonster barney=dz.getDangerousMonster();
u(barney);
v(barney);
VeryBadVampire vampire = new VeryBadVampire();
Vampire vlad=vampire.getVampire();
u(vlad);
v(vlad);
w(vlad);
}
}
编译这段代码,你发现依然可以,但是,现在你把修改后(注释后的代码放到)代码文件放到另外一个新的文件夹下编译,你会发现不能通过,从出错的地方来看是缺少类DangerousMonster.class和Vampire.class类,
我也不知道自己想问什么,原来觉得,匿名类实现接口本来意义是做检测,以为没有接口依然可以,现在..去掉了就不是匿名类了,象是一个new对象的过程,但是new()后面有{方法()} 这又不好解释是new对象,因此,修改成注释后还能编译成功我很郁闷.
interface Monster {
void menace();
}
interface DangerousMonster extends Monster {
void destroy();
}
interface Lethal {
void kill();
}
interface Vampire extends DangerousMonster, Lethal {
void drinkBlood();
}
class DragonZilla {
public DangerousMonster getDangerousMonster() {
return new DangerousMonster(){//匿名类实现DangerousMonster接口
public void menace() {
System.out .println("DangerousMonster.menace");
}
public void destroy() {
System.out .println("DangerousMonster.destroy");
}
};
}
}class VeryBadVampire {
public Vampire getVampire(){
return new Vampire(){//匿名类实现Vampire接口 public void drinkBlood() {
System.out .println("Vampire.drinkBlood");
}
public void destroy() {
System.out .println("Vampire.destroy");
}
public void menace() {
System.out .println("Vampire.menace");
}
public void kill() {
System.out .println("Vampire.kill");
} };
}
}public class HorrorShow {
static void u(Monster b) { b.menace(); }
static void v(DangerousMonster d) {
d.menace();
d.destroy();
}
static void w(Lethal l) { l.kill(); }
public static void main(String[] args) {
DragonZilla dz = new DragonZilla();
DangerousMonster barney=dz.getDangerousMonster();
u(barney);
v(barney);
VeryBadVampire vampire = new VeryBadVampire();
Vampire vlad=vampire.getVampire();
u(vlad);
v(vlad);
w(vlad);
}
}
我用两个匿名类实现两个接口,我编译运行都没问题,
现在你按我说的去做会发现一个问题,
1先编译上面的代码->2把代码变成如下:
interface Monster {
void menace();
}
//interface DangerousMonster extends Monster {
//void destroy();
//}
interface Lethal {
void kill();
}
//interface Vampire extends DangerousMonster, Lethal {
//void drinkBlood();
//}
class DragonZilla {
public DangerousMonster getDangerousMonster() {
return new DangerousMonster(){//匿名类实现DangerousMonster接口
public void menace() {
System.out .println("DangerousMonster.menace");
}
public void destroy() {
System.out .println("DangerousMonster.destroy");
}
};
}
}class VeryBadVampire {
public Vampire getVampire(){
return new Vampire(){//匿名类实现Vampire接口 public void drinkBlood() {
System.out .println("Vampire.drinkBlood");
}
public void destroy() {
System.out .println("Vampire.destroy");
}
public void menace() {
System.out .println("Vampire.menace");
}
public void kill() {
System.out .println("Vampire.kill");
} };
}
}public class HorrorShow {
static void u(Monster b) { b.menace(); }
static void v(DangerousMonster d) {
d.menace();
d.destroy();
}
static void w(Lethal l) { l.kill(); }
public static void main(String[] args) {
DragonZilla dz = new DragonZilla();
DangerousMonster barney=dz.getDangerousMonster();
u(barney);
v(barney);
VeryBadVampire vampire = new VeryBadVampire();
Vampire vlad=vampire.getVampire();
u(vlad);
v(vlad);
w(vlad);
}
}
编译这段代码,你发现依然可以,但是,现在你把修改后(注释后的代码放到)代码文件放到另外一个新的文件夹下编译,你会发现不能通过,从出错的地方来看是缺少类DangerousMonster.class和Vampire.class类,
我也不知道自己想问什么,原来觉得,匿名类实现接口本来意义是做检测,以为没有接口依然可以,现在..去掉了就不是匿名类了,象是一个new对象的过程,但是new()后面有{方法()} 这又不好解释是new对象,因此,修改成注释后还能编译成功我很郁闷.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货