Mam podklasę i nadklasę. W superklasie mam metodę, która rejestruje coś. Kiedy utworzę instancję podklasy, program rejestrujący tworzy komunikat rejestrowania dla super klasy. Dlaczego to się dzieje? PrzykłademJak uzyskać rejestrator dla podklasy?
Kod:
SuperClass.java
import java.util.logging.Level;
import java.util.logging.Logger;
public abstract class SuperClass {
public void logAndPrintClass(){
String name = this.getClass().getName();
System.out.println(name);
Logger logger = Logger.getLogger(name);
logger.log(Level.INFO, "Logmessage");
}
}
SubClass.java
public class SubClass extends SuperClass {
}
TestLogBubClass.java
public class TestLogBubClass {
public static void main(String[] args){
SuperClass obj = new SubClass();
obj.logAndPrintClass();
}
}
wyjściowa:
SubClass
Mar 15, 2013 6:30:04 PM SuperClass logAndPrintClass
INFO: Logmessage
Jak widać nazwa klasy jest poprawnie wydrukowana, ale niepoprawnie reprezentowana w komunikacie dziennika.
To jest tak, że obiekt 'LogRecord', który jest ukryty za wywołaniem' logger.log() 'jest tworzony w podklasie. – parsifal
Nie chcę przesłonić metody w każdej podklasie ze względu na rejestrowanie. W kodzie produkcyjnym robi więcej niż tylko drukowanie i rejestrowanie wiadomości. Kod w pytaniu jest po prostu najprostszym przykładem, który ma takie samo zachowanie. – Paling