On possible duplicate:
This thread is not asking how to extend a
final
class. It is asking why a class declared asfinal
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。)
最佳答案
标记为 final
的 Class
可以扩展另一个 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/