Экземпляр Java: Супертипы и Подтипы, кажется, равны? Как протестировать точно на Тип?

Я должен протестировать, если экземпляр точно имеет данный тип. Но кажется, что instanceof возвращает true также, если подтип тестируется на супертип (случай 3). Я никогда не знал это прежде, и я вполне удивлен. Я делаю что-то не так здесь? Как я точно тестирую на данный тип?

//..

class DataSourceEmailAttachment extends EmailAttachment

//...

EmailAttachment emailAttachment = new EmailAttachment();
DataSourceEmailAttachment emailAttachmentDS = new DataSourceEmailAttachment();

    if (emailAttachment instanceof EmailAttachment){
        System.out.println(" 1");
    }
    if (emailAttachment instanceof DataSourceEmailAttachment){
        System.out.println(" 2");
    }

    if (emailAttachmentDS instanceof EmailAttachment){
        System.out.println(" 3 ");
    }
    if (emailAttachmentDS instanceof DataSourceEmailAttachment){
        System.out.println(" 4");
    }

РЕЗУЛЬТАТ:

 1
 3 
 4

Я хочу избежать случая 3, я только хочу "точные совпадения" (случай 1 и 4), как я тестирую на них?

6
задан Michael Petrotta 14 March 2010 в 19:13
поделиться