Когда НЕ вызывать метод super ()при переопределении?

Когда я создаю свой собственный пользовательский класс Android, я extendсвой родной класс. Затем, когда я хочу переопределить базовый метод, я всегда вызываю метод super(), точно так же, как я всегда делаю в onCreate, onStopи т. д.

И я думал, что это он, так как с самого начала Android команда посоветовала нам всегда вызывать superпри каждом переопределении метода.

Но в многих книгах я вижу, что разработчики, более опытные, чем я, часто пропускают вызов superи я очень сомневаюсь, что они делают это из-за недостатка знаний. Например, посмотрите на этот базовый класс парсера SAX , где superопущен в startElement,charactersиendElement:

public class SAXParser extends DefaultHandler{
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if(qName.equalsIgnoreCase("XXY")) {
            //do something
        }
    }

    public void characters(char[] ch, int start, int length) throws SAXException {
        //do something
    }

    public void endElement(String uri, String localName, String qName) throws SAXException {
        if(qName.equalsIgnoreCase("XXY")) {
            //do something
        }else () {
            //do something
        }
    }
}

Если вы попытаетесь создать какой-либо метод переопределения через Eclipse или любую другую IDE, superвсегда будет создаваться как часть автоматизированного процесса.

Это был всего лишь простой пример. Книги полны подобного кода .

Как они узнают, когда нужно звонить super, а когда можно не звонить?

ПС. Не привязывайтесь к этому конкретному примеру. Это был просто пример, случайно выбранный из множества примеров.

(Это может показаться вопросом новичка, но я действительно запутался.)

109
задан Peter Mortensen 20 April 2012 в 15:26
поделиться