gpt4 book ai didi

java - 为什么匿名类不能实现两个分离的接口(interface)但可以实现内部接口(interface)?

转载 作者:行者123 更新时间:2023-11-29 07:40:02 26 4
gpt4 key购买 nike

匿名类只能从一个类或接口(interface)扩展,所以我不能做下一步:

interface Enjoyable {
public void enjoy();
}

interface Exercisable {
public void exercise();
}

public class Test {
public static void main(String[] args) {
new Enjoyable implements Exercisable() {
public void enjoy() {
System.out.println(":D");
}
}.enjoy();

}
}

它说:

Enjoyable.Exercisable cannot be resolved to a type

我正在尝试复制此行为并编写了下一个代码:

interface Enjoyable {
interface Exercisable {
public void exercise();
}
public void enjoy();
}

public class Test {
public static void main(String[] args) {
new Enjoyable.Exercisable() {
public void enjoy() {
System.out.println(":D");
}

public void exercise() {
System.out.println("Doing exercise !!!");

}
}.exercise();

new Enjoyable.Exercisable() {
public void enjoy() {
System.out.println(":D");
}

public void exercise() {
System.out.println("Doing exercise !!!");

}
}.enjoy();

}
}

然后我得到:

Doing exercise !!! :D

还有其他方法可以模拟吗?我必须如何在匿名类中实现这两种方法?

谢谢

最佳答案

I want an anonymous class who implements 2 interfaces methods

我假设你的意思是你想要一个实现两个接口(interface)的匿名类。你不能,直接。

你可以做到

interface EnjoyableAndExercisable extends Enjoyable, Exercisable {
}

然后创建一个实现它的匿名类。

EnjoyableAndExercisable o = new EnjoyableAndExercisable() {
@Override
public void enjoy() {
System.out.println(":D");
}
@Override
public void exercise() {
System.out.println("Doing exercise !!!");

}
};

请注意 @Override,它将始终验证您是否实际覆盖了一个方法。

但是在你的代码中,这个匿名类

new Enjoyable.Exercisable() {
public void enjoy() {
System.out.println(":D");
}

public void exercise() {
System.out.println("Doing exercise !!!");

}
}.enjoy();

只是 Exercisable 的一个实现。您只是碰巧在其中声明了一个名为 enjoy 的方法。

您不能将它分配给 Enjoyable 类型的变量

Enjoyable ref = new Enjoyable.Exercisable() {
public void enjoy() {
System.out.println(":D");
}

public void exercise() {
System.out.println("Doing exercise !!!");

}
}; // nope, compile time error

您只能在声明此匿名类型的新实例创建表达式上调用该方法。您不能以任何其他方式调用它(因为它是以匿名类型声明的)。

关于java - 为什么匿名类不能实现两个分离的接口(interface)但可以实现内部接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31212368/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com