ต่อไปนี้คือกฎที่เราควรพิจารณาขณะ override เมธอดอย่างถูกต้อง:
- รายการอาร์กิวเมนต์ (argument list) ควรจะเหมือนกับของเมธอดที่ถูก override ทุกประการ
- ชนิดการคืนค่า (return type) ควรจะเหมือนกันหรือเป็น subtype ของชนิดการคืนค่าที่ประกาศในเมธอดที่ถูก override ต้นฉบับในซุปเปอร์คลาส
- ระดับการเข้าถึง (access level) ไม่สามารถจำกัดมากกว่าระดับการเข้าถึงของเมธอดที่ถูก override ได้ ตัวอย่าง: หากเมธอดของซุปเปอร์คลาสประกาศเป็น public เมธอดที่ override ในซับคลาสไม่สามารถเป็น private หรือ protected ได้
- เมธอดอินสแตนซ์สามารถ override ได้ก็ต่อเมื่อพวกมันถูกสืบทอดโดยซับคลาส
- เมธอดที่ประกาศเป็น final ไม่สามารถ override ได้
- เมธอดที่ประกาศเป็น static ไม่สามารถ override ได้ แต่สามารถประกาศใหม่ (re-declared) ได้
- หากไม่สามารถสืบทอดเมธอดได้ แล้วมันก็ไม่สามารถ override ได้
- ซับคลาสภายในแพ็กเกจเดียวกับซุปเปอร์คลาสของอินสแตนซ์ สามารถ override เมธอดของซุปเปอร์คลาสใดๆ ที่ไม่ได้ประกาศเป็น private หรือ final
- ซับคลาสในแพ็กเกจที่ต่างกัน สามารถ override ได้เฉพาะเมธอด non-final ที่ประกาศเป็น public หรือ protected
- เมธอดที่ override สามารถโยน unchecked exceptions ใดๆ ได้ ไม่ว่าจะว่าเมธอดที่ถูก override จะโยนข้อยกเว้นหรือไม่ อย่างไรก็ตาม เมธอดที่ override ไม่ควรโยน checked exceptions ใหม่หรือกว้างกว่าที่ประกาศโดยเมธอดที่ถูก override เมธอดที่ override สามารถโยน checked exceptions ที่แคบกว่าหรือน้อยกว่าของเมธอดที่ถูก override ได้
- คอนสตรัคเตอร์ไม่สามารถ override ได้