เมื่อฉันสร้างคลาสที่กำหนดเองของ 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 ได้อย่างปลอดภัยเพราะมัน "ไม่มีอะไร" แต่คุณไม่จำเป็นต้องทำและคุณสามารถลบล้างได้จริงๆ คุณมักจะบอกได้ว่าคุณต้อง / สามารถ / ไม่ควรทำหรือไม่หากคุณอ่านเอกสารสำหรับวิธีการนั้น