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

标签 java inheritance final extends

On possible duplicate:

This thread is not asking how to extend a final class. It is asking why a class declared as final could possibly extend another class.


来自 this主题:

A final class is simply a class that can't be extended.

但是,我有一个辅助类,我声明它是 final 并且 extends 另一个类:

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,没有错误。

为什么我能够扩展一个final类,而我在理论上不应该这样做?

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

最佳答案

标记为 finalClass 可以扩展另一个 Class,但是不能扩展 final Class

这是一个例子:

这是允许的

public class Animal {

}

public final class Cat extends Animal {

}

这是不允许

public final class Animal {

}

public class Cat extends Animal {

}

关于java - 是否可以在 Java 中扩展最终类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30070063/

相关文章:

Java:在 JFrame 上添加背景图像

java - 项目无法在 Netbeans 8.2 上运行

Python - 从旧式类继承

java - 访问说明符涉及子类中的重写吗?

java - 如何以无配置方式将可选任务 sshexec 加载到 Ant 中?

java - ListView 适配器异步操作

c# - 当参数类型是基类时,将派生类作为参数传递给方法

c# - 接口(interface)会在子类中自动实现吗?

java - 延迟实例化最终字段

java - 在 lambda 表达式中使用非最终循环变量