当前位置: 首页 > 知识库问答 >
问题:

是否可以在Java中扩展最终类?

洪英豪
2023-03-14

在可能的副本上:

此线程不是在询问如何扩展最终类。它问为什么一个声明为final的类可能会扩展另一个类。

从该线程:

<code>final</code>类只是一个不能扩展的类。

但是,我有一个帮助程序类,我声明它是最终的,并扩展了另一个类:

public final class PDFGenerator extends PdfPageEventHelper {
    private static Font font;

    private PDFGenerator() {
        // prevent instantiation
    }

    static {
        try {
            BaseFont baseFont = BaseFont.createFont(
                "/Trebuchet MS.ttf",
                BaseFont.WINANSI,
                BaseFont.EMBEDDED
            );

            font = new Font(baseFont, 9);

        } catch(DocumentException de) { 
            de.printStackTrace();

        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }

    public static ByteArrayOutputStream generatePDF() throws DocumentException {            
        Document doc = new Document();
        ByteArrayOutputStream baosPDF = new ByteArrayOutputStream();        
        PdfWriter pdfWriter = PdfWriter.getInstance(doc, baosPDF);

        try {           
            // create pdf

        } catch(DocumentException de) {
            baosPDF.reset();
            throw de;

        } finally {
            if(doc != null) {
                doc.close();
            }

            if(pdfWriter != null) {
                pdfWriter.close();
            }
        }

        return baosPDF;
    }
}

Eclipse没有检测到任何错误。我已经测试了这个类,并且PDF是成功生成的,没有错误。

为什么我能够延长期末课程,而理论上我不应该延长?

(如果重要的话,我正在使用Java7。)

共有3个答案

徐焱
2023-03-14

在我看来,PdfPageEventHelper不是最终的(这个javadoc证实了这一点),所以你可以扩展它,但你仍然不能扩展这个新的类PDFGenerator

不过,您可以尝试这样做:

private Object abacaba = new PDFGenerator() {
};

然后你会得到编译错误:

BlahBlah.java:n:错误:无法从最终PDFGenerator继承

国斌斌
2023-03-14

< code>PDFGenerator无法扩展,因为它被标记为final。您正在扩展未标记为final的< code>PdfPageEventHelper。

乐正远
2023-03-14

标记为< code>final的< code >类可以扩展另一个< code >类,但是< code>final类不能扩展。

这里有一个例子:

这是允许的

public class Animal {

}

public final class Cat extends Animal {

}

这是不允许的

public final class Animal {

}

public class Cat extends Animal {

}
 类似资料:
  • 问题内容: 这实际上是我现在面临的问题。我有一个类,可以说该类定义了一个返回实例的方法。该类在内部定义并声明。我想要做的就是定义一个类扩展,但我也想对与加入我自己的功能(方法,属性等)。我也想回来。 问题是最终的。这是我想做的事的例证: 我想做的是: 我该如何实现? [编辑]我正在向我的问题添加更多详细信息。我实际上是在为Jenkins开发一个插件,经过搜索,我意识到有一个插件提供了我想做的基本功

  • 问题内容: 在Java中,我们不能覆盖final方法,但是有可能重载吗? 问题答案: 是的,重载最终方法是完全合法的。 例如:

  • 我现在正在学习,我被赋予了一个简单的(我以为是这样的)任务。我必须让这段代码工作(我不能修改它): 我认为MousePressListener应该是FunctionalInterface,但它不能扩展MouseListener。有没有办法解决这个问题,或者我是从坏的方面来处理它?

  • 我也需要扩展WebMvcConfigurationSupport类,修改两个内容: 我喜欢从WebMvcAutoConfiguration类注册的默认值,但是由于类上的条件注释,当我扩展WebMvcConfigurationSupport类时,它会防止自动配置的发生。 提前道谢!

  • 问题内容: 是否可以使用Java 而非 JavaScript 构建Chrome扩展程序?(我在Eclipse IDE中使用Java SE。) 问题答案: Chrome扩展程序必须运行JavaScript。但是,您可以使用Google Web Toolkit 将Java编译为JavaScript。

  • 我用的是java 1.8。我开始知道WToolkit是java 1.8的最终版本。但是我需要扩展这个类。你能告诉我扩展这个类的方法吗?我看了javaagent机制相关的文章。如果有人知道代理机制,请解释。