คำถามติดแท็ก overriding

การลบล้างเมธอดในการเขียนโปรแกรมเชิงวัตถุเป็นคุณลักษณะของภาษาที่อนุญาตให้คลาสย่อยหรือคลาสย่อยจัดเตรียมการนำเมธอดเฉพาะที่จัดเตรียมไว้แล้วโดยหนึ่งในซูเปอร์คลาสหรือคลาสพาเรนต์

14
เหตุใดจึงสำคัญที่ต้องแทนที่ GetHashCode เมื่อเมธอด Equals ถูกเขียนทับ
รับคลาสต่อไปนี้ public class Foo { public int FooId { get; set; } public string FooName { get; set; } public override bool Equals(object obj) { Foo fooItem = obj as Foo; if (fooItem == null) { return false; } return fooItem.FooId == this.FooId; } public override int GetHashCode() { // …
1444 c#  overriding  hashcode 

12
ข้อผิดพลาด 'ต้องแทนที่วิธี Superclass' หลังจากนำเข้าโครงการลงใน Eclipse
เมื่อใดก็ตามที่ฉันต้องนำเข้าโครงการของฉันอีกครั้งใน Eclipse (ถ้าฉันติดตั้ง Eclipse อีกครั้งหรือเปลี่ยนตำแหน่งของโครงการ) วิธีการที่แทนที่ของฉันเกือบทั้งหมดจะไม่ได้รับการจัดรูปแบบอย่างถูกต้องทำให้เกิดข้อผิดพลาด: วิธีการนั้นจะต้องแทนที่วิธี superclass มันอาจเป็นเรื่องสำคัญที่จะกล่าวถึงสิ่งนี้กับโครงการ Android ไม่ว่าด้วยเหตุผลใดก็ตามค่าอาร์กิวเมนต์ของวิธีการนั้นไม่ได้บรรจุอยู่เสมอดังนั้นฉันจึงต้องใส่ค่าด้วยตนเอง ตัวอย่างเช่น list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { //These arguments have their correct names public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { } }); จะมีประชากรเริ่มต้นเช่นนี้: list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() { //This methods arguments were not automatically provided public void onCreateContextMenu(ContextMenu arg1, View arg2, ContextMenuInfo …

11
ปัญหาใดที่ควรพิจารณาเมื่อลบล้างเท่ากับและ hashCode ใน Java
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ จะต้องพิจารณาประเด็น / ข้อผิดพลาดใดบ้างเมื่อเอาชนะequalsและhashCode?


21
ความแตกต่างกับการเอาชนะการบรรทุกเกินพิกัด
ในแง่ของ Java เมื่อมีคนถามว่า: ความแตกต่างคืออะไร? จะบรรทุกเกินพิกัดหรือเอาชนะจะเป็นคำตอบที่ยอมรับได้หรือไม่? ฉันคิดว่ามันมีอะไรมากกว่านั้น หากคุณมีคลาสฐานนามธรรมที่กำหนดวิธีการที่ไม่มีการใช้งานและคุณกำหนดวิธีการนั้นในคลาสย่อยนั้นจะยังคงทับซ้อนกัน? ฉันคิดว่าการโหลดมากเกินไปไม่ใช่คำตอบที่ถูกต้องแน่นอน

7
ฉันสามารถเรียกใช้ฟังก์ชันเสมือนของคลาสพื้นฐานได้หรือไม่ถ้าฉันลบล้างมัน?
ว่าฉันมีชั้นเรียนFooและBarตั้งค่าเช่นนี้: class Foo { public: int x; virtual void printStuff() { std::cout << x << std::endl; } }; class Bar : public Foo { public: int y; void printStuff() { // I would like to call Foo.printStuff() here... std::cout << y << std::endl; } }; ดังที่อธิบายไว้ในรหัสฉันต้องการที่จะสามารถเรียกฟังก์ชั่นระดับฐานที่ฉันเอาชนะ ใน Java มีsuper.funcname()ไวยากรณ์ เป็นไปได้ใน …

10
แทนที่ปุ่มย้อนกลับเพื่อทำหน้าที่เหมือนปุ่มโฮม
เมื่อกดปุ่มย้อนกลับฉันต้องการให้แอปพลิเคชันของฉันเข้าสู่สถานะหยุดทำงานแทนที่จะเป็นสถานะที่ถูกทำลาย ในเอกสาร Android มันระบุ: ... ไม่ใช่ทุกกิจกรรมที่มีพฤติกรรมที่ถูกทำลายเมื่อกด BACK เมื่อผู้ใช้เริ่มเล่นเพลงในแอปพลิเคชั่น Music แล้วกด BACK แอพพลิเคชั่นจะแทนที่พฤติกรรมปกติหลังป้องกันไม่ให้กิจกรรมของผู้เล่นถูกทำลายและเล่นเพลงต่อไปแม้ว่ากิจกรรมจะไม่ปรากฏให้เห็นอีกต่อไป ฉันจะทำซ้ำฟังก์ชั่นนี้ในแอปพลิเคชันของตัวเองได้อย่างไร ฉันคิดว่าต้องมีความเป็นไปได้สามอย่าง ... จับปุ่มย้อนกลับกด (ตามด้านล่าง) แล้วเรียกวิธีการใด ๆ ที่ปุ่มโฮมเรียก @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Log.d(this.getClass().getName(), "back button pressed"); } return super.onKeyDown(keyCode, event); } จับการกดปุ่มย้อนกลับจากนั้นหลอกการกดปุ่มโฮม บันทึกการกดปุ่มย้อนกลับจากนั้นเริ่มกิจกรรมของหน้าจอหลักทำให้กิจกรรมของแอปพลิเคชันของฉันเข้าสู่สถานะหยุดทำงานได้อย่างมีประสิทธิภาพ แก้ไข: ฉันรู้เกี่ยวกับบริการและกำลังใช้งานแอปพลิเคชันที่เกี่ยวข้องกับปัญหานี้ คำถามนี้เกี่ยวกับการทำให้กิจกรรมเข้าสู่สถานะหยุดแทนที่จะเป็นสถานะทำลายเมื่อกดปุ่มย้อนกลับ

7
การนำสองอินเตอร์เฟสมาใช้ในคลาสด้วยวิธีเดียวกัน วิธีการอินเทอร์เฟซใดถูกแทนที่
สองอินเตอร์เฟสที่มีชื่อเมธอดและลายเซ็นเหมือนกัน แต่ดำเนินการโดยชั้นเดียวแล้ววิธีการรวบรวมจะระบุวิธีการที่เป็นอินเตอร์เฟซที่? Ex: interface A{ int f(); } interface B{ int f(); } class Test implements A, B{ public static void main(String... args) throws Exception{ } @Override public int f() { // from which interface A or B return 0; } }

5
คำหลัก 'แทนที่' เป็นเพียงการตรวจสอบวิธีเสมือนจริงที่ถูกแทนที่หรือไม่
เท่าที่ฉันเข้าใจการแนะนำของoverrideคำหลักใน C ++ 11 ไม่มีอะไรมากไปกว่าการตรวจสอบเพื่อให้แน่ใจว่าฟังก์ชั่นการใช้งานเป็นการนำoverrideของvirtualฟังก์ชั่นในชั้นฐาน มันคืออะไร

9
คีย์เวิร์ด“ เสมือน” C ++ สำหรับฟังก์ชันในคลาสที่ได้รับ จำเป็นหรือไม่
ด้วยคำจำกัดความของโครงสร้างรับด้านล่าง ... struct A { virtual void hello() = 0; }; วิธีการ # 1: struct B : public A { virtual void hello() { ... } }; วิธีการ # 2: struct B : public A { void hello() { ... } }; มีความแตกต่างระหว่างสองวิธีในการแทนที่ฟังก์ชัน hello หรือไม่?

4
เหตุใดฟังก์ชันที่แทนที่ในคลาสที่ได้รับจะซ่อนโอเวอร์โหลดอื่น ๆ ของคลาสพื้นฐาน
พิจารณารหัส: #include <stdio.h> class Base { public: virtual void gogo(int a){ printf(" Base :: gogo (int) \n"); }; virtual void gogo(int* a){ printf(" Base :: gogo (int*) \n"); }; }; class Derived : public Base{ public: virtual void gogo(int* a){ printf(" Derived :: gogo (int*) \n"); }; }; int main(){ …

12
JavaScript: การแจ้งเตือนที่มีอำนาจเหนือกว่า ()
ใครบ้างมีประสบการณ์กับการเอาชนะalert()ฟังก์ชั่นใน JavaScript? เบราว์เซอร์ใดที่รองรับสิ่งนี้ เวอร์ชันของเบราว์เซอร์ใดที่รองรับสิ่งนี้ สิ่งที่เป็นอันตรายในการเอาชนะฟังก์ชั่น?

10
C # - การใช้คำหลักเสมือน + แทนที่กับใหม่
อะไรคือความแตกต่างระหว่างการประกาศวิธีการในประเภทฐาน " virtual" แล้วแทนที่มันในประเภทลูกโดยใช้overrideคำหลัก "" ซึ่งตรงข้ามกับการใช้newคำหลัก "" เมื่อประกาศวิธีการจับคู่ในประเภทลูก

14
ความแตกต่างระหว่างใหม่และแทนที่
สงสัยว่าความแตกต่างระหว่างสิ่งต่อไปนี้: กรณีที่ 1: คลาสพื้นฐาน public void DoIt(); กรณีที่ 1: คลาสที่รับมา public new void DoIt(); กรณีที่ 2: คลาสฐาน public virtual void DoIt(); กรณีที่ 2: คลาสที่รับมา public override void DoIt(); ทั้งกรณีที่ 1 และ 2 ดูเหมือนว่าจะมีผลเหมือนกันตามการทดสอบที่ฉันใช้ มีความแตกต่างหรือวิธีที่ต้องการหรือไม่?

5
วิธีที่ถูกต้องในการแทนที่เมธอด setter ใน Ruby on Rails คืออะไร?
ฉันใช้ Ruby on Rails 3.2.2 และฉันต้องการทราบว่าต่อไปนี้เป็นวิธี "ถูกต้อง" / "ถูกต้อง" / "แน่ใจ" เพื่อแทนที่เมธอด setter สำหรับแอตทริบิวต์ class ของฉัน attr_accessible :attribute_name def attribute_name=(value) ... # Some custom operation. self[:attribute_name] = value end รหัสข้างต้นดูเหมือนว่าจะทำงานตามที่คาดไว้ แต่ผมอยากจะทราบว่าโดยการใช้รหัสดังกล่าวในอนาคตผมจะมีปัญหาหรืออย่างน้อยสิ่งที่เป็นปัญหา "ผมควรคาดหวัง" / "ที่อาจเกิดขึ้น" กับ Ruby on Rails หากนั่นไม่ใช่วิธีที่ถูกต้องในการแทนที่เมธอด setter วิธีที่ถูกต้องคืออะไร หมายเหตุ : ถ้าฉันใช้รหัส attr_accessible :attribute_name def attribute_name=(value) ... # …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.