เมื่อฉันสร้างคลาสที่กำหนดเองของ Android ฉันจะextendเป็นคลาสดั้งเดิม จากนั้นเมื่อฉันต้องการที่จะแทนที่วิธีฐานที่ฉันมักจะเรียกsuper()วิธีการเช่นเดียวกับที่ฉันมักจะทำในonCreate, onStopฯลฯ
และฉันคิดว่านี่เป็นเช่นนั้นตั้งแต่แรกเริ่มทีม Android แนะนำให้เราเรียกร้องให้superลบล้างทุกวิธี
แต่ในหนังสือหลายเล่มฉันเห็นว่านักพัฒนาที่มีประสบการณ์มากกว่าตัวเองมักจะละเว้นการโทรsuperและฉันสงสัยจริงๆว่าพวกเขาทำไปเพราะขาดความรู้ ยกตัวอย่างเช่นดูที่นี้พื้นฐานแซ็กโซโฟนระดับ parser ที่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และเมื่อใดที่คุณไม่สามารถโทรได้
ปล. อย่าผูกมัดกับตัวอย่างเฉพาะนี้ มันเป็นเพียงตัวอย่างที่สุ่มเลือกมาจากหลาย ๆ ตัวอย่าง
(นี่อาจฟังดูเป็นคำถามสำหรับมือใหม่ แต่ฉันสับสนจริงๆ)

endElementเอกสาร API ของ API ระบุว่า "โดยค่าเริ่มต้นไม่ต้องทำอะไรเลยผู้เขียนแอปพลิเคชันอาจแทนที่วิธีนี้ ... " ซึ่งหมายความว่าคุณสามารถโทรหา super ได้อย่างปลอดภัยเพราะมัน "ไม่มีอะไร" แต่คุณไม่จำเป็นต้องทำและคุณสามารถลบล้างได้จริงๆ คุณมักจะบอกได้ว่าคุณต้อง / สามารถ / ไม่ควรทำหรือไม่หากคุณอ่านเอกสารสำหรับวิธีการนั้น