On possible duplicate:Возможно ли продлить окончательный класс на Java?
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 был успешно сгенерирован без ошибок.
Почему я был в состоянии extend
a final
класс, когда я не был в состоянии теоретически?
(Я использую Java 7, если это имеет значение.)
Попробуйте * расширение * '' PDFGenerator. Последний класс может расширять классы, но он не может быть расширен другими классами. – TheLostMind
Возможный дубликат: http://stackoverflow.com/questions/13294629/how-to-extend-a-final-class-in-java – mattfryercom
Окончательный 'class, который расширяет другой класс, - это не то же самое, что другой класс, который расширяет класс' final' - это совсем наоборот. – Jesper