java - 关于抽象类中方法的快速问题

标签 java class oop abstract

我是一名业余程序员,最近在研究抽象类时偶然发现了这种覆盖函数的特殊方式:

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/

相关文章:

Java Spring MVC 如何获取这个设定值?

swift - 用户希望在文本字段中输入整数

Java 同步静态方法 : lock on object or class

class - 类如何帮助您管理大型应用程序?

php - 无法实现两个具有相同方法名称的接口(interface)

java - 为什么我无法在 Android 的 edittext 中打印转义序列?

Java 锁和条件

c++ - 在 Visual Studio Code 中为 C++ 创建一个新类?

java - 听众有更好的做法吗?

java - 最小化 Java 中的可见性