我是一名业余程序员,最近在研究抽象类时偶然发现了这种覆盖函数的特殊方式:
abstract class Test {
abstract String message();
}
public class Abstract {
public static void main(String[] args) {
String word = new Test() {
String message() {
return "Hello World";
}
}.message();
}
}
我对代码中的特定部分感到困惑:
String word = new Test() {
String message() {
return "Hello World";
}
}.message();
从代码的这个特定部分来看,抽象类似乎正在“实例化”(如果我使用的术语正确的话)。但是,我了解到抽象类不能被实例化。
我知道这是一个很明显的问题,如果你能向我解释一下当这部分代码被编译时发生了什么,是否可以?如果您这样做,我将不胜感激。
谢谢,
最佳答案
From looking at this specific section of the code, it seems that the abstract class is being "instantiated"
不是真的。您看到的是一个匿名类的实例化,它扩展了抽象 Test
类,并实现了该类的抽象 message()
方法。匿名类不是抽象的,因此可以实例化。
等效的代码是:
public class SubTest extends Test (
String message() {
return "Hello World";
}
}
public class Abstract {
public static void main(String[] args) {
String word = new SubTest().message();
}
}
关于java - 关于抽象类中方法的快速问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59123874/