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

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


7
เมื่อใดที่จะไม่เรียก super () วิธีการเมื่อแทนที่?
เมื่อฉันสร้างคลาสที่กำหนดเองของ 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 …
113 java  android  overriding 

9
วิธีการแทนที่วิธีการเท่ากับใน Java
ฉันกำลังพยายามแทนที่วิธีการเท่ากับใน Java ฉันมีคลาสPeopleซึ่งโดยทั่วไปมี 2 ช่องข้อมูลnameและage. ตอนนี้ฉันต้องการแทนที่equalsวิธีการเพื่อให้ฉันสามารถตรวจสอบระหว่างวัตถุ 2 คนได้ รหัสของฉันมีดังนี้ public boolean equals(People other){ boolean result; if((other == null) || (getClass() != other.getClass())){ result = false; } // end if else{ People otherPeople = (People)other; result = name.equals(other.name) && age.equals(other.age); } // end else return result; } // end equals แต่เมื่อฉันเขียนage.equals(other.age)มันทำให้ฉันมีข้อผิดพลาดเป็นวิธีการเท่ากับสามารถเปรียบเทียบสตริงเท่านั้นและอายุคือจำนวนเต็ม …
108 java  overriding  equals 

3
เรียกใช้เมธอดคลาสของคลาสพื้นฐานใน Python
พิจารณารหัสต่อไปนี้: class Base(object): @classmethod def do(cls, a): print cls, a class Derived(Base): @classmethod def do(cls, a): print 'In derived!' # Base.do(cls, a) -- can't pass `cls` Base.do(a) if __name__ == '__main__': d = Derived() d.do('hello') > $ python play.py > In derived! > <class '__main__.Base'> msg จากDerived.doฉันจะโทรBase.doอย่างไร? โดยปกติฉันจะใช้superหรือแม้แต่ชื่อคลาสฐานโดยตรงหากนี่เป็นเมธอดอ็อบเจ็กต์ปกติ แต่ดูเหมือนว่าฉันไม่สามารถหาวิธีเรียกเมธอดคลาสในคลาสฐานได้ ในตัวอย่างข้างต้นBase.do(a)พิมพ์BaseคลาสแทนDerivedคลาส

17
ทำไม / เมื่อใดจึงเหมาะสมที่จะแทนที่ ToString
ฉันกำลังศึกษา C # และฉันสงสัยว่าประเด็นและประโยชน์ของการลบล้างคืออะไร ToStringอาจเป็นอย่างไรดังที่แสดงในตัวอย่างด้านล่าง สามารถทำได้ด้วยวิธีที่ง่ายกว่านี้โดยใช้วิธีการทั่วไปโดยไม่ต้องแทนที่? public string GetToStringItemsHeadings { get { return string.Format("{0,-20} {1, -20}", "Office Email", "Private Email"); } } public override string ToString() { string strOut = string.Format("{0,-20} {1, -20}", m_work, m_personal); return strOut; }
103 c#  overriding 

6
วิธีการแทนที่คุณสมบัติของคลาส CSS โดยใช้คลาส CSS อื่น
ฉันค่อนข้างใหม่กับ CSS3 และฉันต้องการที่จะทำสิ่งต่อไปนี้: เมื่อฉันเพิ่มคลาสเข้าไปในองค์ประกอบมันจะแทนที่คุณสมบัติของคลาสอื่นที่ใช้ในองค์ประกอบเฉพาะนี้ สมมุติว่ามี <a class="left carousel-control" href="#carousel" data-slide="prev"> ฉันต้องการที่จะสามารถที่จะเพิ่มระดับที่เรียกว่ากว่าจะแทนที่พื้นหลังเริ่มต้นในชั้นเรียนbakground-noneleft ขอบคุณ!
103 css  class  overriding 

9
แทนที่ฟังก์ชันเสมือน C ++ อย่างปลอดภัย
ฉันมีคลาสพื้นฐานที่มีฟังก์ชันเสมือนและฉันต้องการแทนที่ฟังก์ชันนั้นในคลาสที่ได้รับ มีวิธีใดบ้างที่จะทำให้คอมไพลเลอร์ตรวจสอบว่าฟังก์ชันที่ฉันประกาศในคลาสที่ได้รับมาแทนที่ฟังก์ชันในคลาสฐานหรือไม่? ฉันต้องการเพิ่มมาโครหรือสิ่งที่ช่วยให้มั่นใจได้ว่าฉันไม่ได้ประกาศฟังก์ชันใหม่โดยไม่ได้ตั้งใจแทนที่จะแทนที่ฟังก์ชันเก่า ใช้ตัวอย่างนี้: class parent { public: virtual void handle_event(int something) const { // boring default code } }; class child : public parent { public: virtual void handle_event(int something) { // new exciting code } }; int main() { parent *p = new child(); p->handle_event(1); } ที่นี่parent::handle_event()เรียกว่าแทนchild::handle_event()เนื่องจากวิธีการของเด็กพลาดการconstประกาศจึงประกาศวิธีการใหม่ นี่อาจเป็นการพิมพ์ผิดในชื่อฟังก์ชันหรือความแตกต่างเล็กน้อยในประเภทพารามิเตอร์ …

4
มีวิธีใดบ้างใน C # ที่จะแทนที่เมธอดคลาสด้วยเมธอดส่วนขยาย?
มีบางครั้งที่ฉันต้องการแทนที่เมธอดในคลาสด้วยเมธอดส่วนขยาย มีวิธีใดบ้างที่จะทำใน C #? ตัวอย่างเช่น: public static class StringExtension { public static int GetHashCode(this string inStr) { return MyHash(inStr); } } กรณีที่ฉันต้องการทำเช่นนี้คือสามารถจัดเก็บแฮชของสตริงลงในฐานข้อมูลและมีการใช้ค่าเดียวกันกับคลาสทั้งหมดที่ใช้แฮชของคลาสสตริง (เช่นพจนานุกรมเป็นต้น) ตั้งแต่ ไม่รับประกันว่าอัลกอริทึมการแฮช. Net ในตัวจะเข้ากันได้จาก Framework รุ่นหนึ่งไปอีกเวอร์ชันหนึ่งฉันต้องการแทนที่ด้วยของฉันเอง มีอีกกรณีหนึ่งที่ฉันพบว่าฉันต้องการแทนที่เมธอดคลาสด้วยเมธอดส่วนขยายเช่นกันดังนั้นจึงไม่เฉพาะเจาะจงกับคลาสสตริงหรือเมธอด GetHashCode ฉันรู้ว่าฉันสามารถทำสิ่งนี้ได้ด้วยการแบ่งคลาสย่อยออกจากคลาสที่มีอยู่ แต่มันจะสะดวกมากที่จะสามารถทำกับส่วนขยายได้ในหลาย ๆ กรณี

2
การลบล้างค่าคงที่คลาสเทียบกับคุณสมบัติ
ฉันต้องการทำความเข้าใจให้ดีขึ้นว่าเหตุใดในสถานการณ์ด้านล่างจึงมีความแตกต่างในวิธีการสืบทอดค่าคงที่ของคลาสเทียบกับตัวแปรอินสแตนซ์ <?php class ParentClass { const TEST = "ONE"; protected $test = "ONE"; public function showTest(){ echo self::TEST; echo $this->test; } } class ChildClass extends ParentClass { const TEST = "TWO"; protected $test = "TWO"; public function myTest(){ echo self::TEST; echo $this->test; } } $child = new ChildClass(); $child->myTest(); $child->showTest(); …


13
Java: การเรียกใช้ super method ซึ่งเรียกว่า overridden method
public class SuperClass { public void method1() { System.out.println("superclass method1"); this.method2(); } public void method2() { System.out.println("superclass method2"); } } public class SubClass extends SuperClass { @Override public void method1() { System.out.println("subclass method1"); super.method1(); } @Override public void method2() { System.out.println("subclass method2"); } } public class Demo { public static …

11
Custom ImageView พร้อมเงาตก
โอเคฉันอ่านและค้นหาไปรอบ ๆ และตอนนี้ฉันกำลังเอาหัวพิงกำแพงพยายามคิดออก นี่คือสิ่งที่ฉันมีจนถึงตอนนี้: package com.pockdroid.sandbox; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.widget.ImageView; public class ShadowImageView extends ImageView { private Rect mRect; private Paint mPaint; public ShadowImageView(Context context) { super(context); mRect = new Rect(); mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setShadowLayer(2f, 1f, 1f, Color.BLACK); } @Override …

4
จะแทนที่ to_json ใน Rails ได้อย่างไร?
อัปเดต: ปัญหานี้ไม่ได้รับการสำรวจอย่างเหมาะสม render :jsonปัญหาที่แท้จริงอยู่ภายใน การวางโค้ดแรกในคำถามเดิมจะให้ผลลัพธ์ที่คาดหวัง อย่างไรก็ตามยังมีข้อแม้ ดูตัวอย่างนี้: render :json => current_user คือไม่ได้เช่นเดียวกับ render :json => current_user.to_json นั่นคือrender :jsonจะไม่เรียกใช้to_jsonเมธอดที่เกี่ยวข้องกับวัตถุ User โดยอัตโนมัติ ในความเป็นจริงหากto_jsonถูกแทนที่บนUserโมเดลrender :json => @userจะสร้างตามที่ArgumentErrorอธิบายไว้ด้านล่าง สรุป # works if User#to_json is not overridden render :json => current_user # If User#to_json is overridden, User requires explicit call render :json => current_user.to_json ทั้งหมดนี้ดูเหมือนโง่สำหรับฉัน …

8
เป็นไปได้ไหมที่จะลบล้างเมธอดที่ไม่ใช่เสมือนจริง?
มีวิธีใดในการลบล้างเมธอดที่ไม่ใช่เสมือนจริงหรือไม่? หรือสิ่งที่ให้ผลลัพธ์ที่คล้ายกัน (นอกเหนือจากการสร้าง method ใหม่เพื่อเรียก method ที่ต้องการ)? ฉันต้องการลบล้างวิธีการจากMicrosoft.Xna.Framework.Graphics.GraphicsDeviceโดยคำนึงถึงการทดสอบหน่วย

7
ไม่อนุญาตให้ @Override เมื่อใช้วิธีการเชื่อมต่อ
ฉันมีปัญหาที่กล่าวถึงในชื่อเรื่อง คุณสามารถพูดได้ว่าเธรดนี้ซ้ำกัน: ฉันจะปิดการตรวจสอบข้อผิดพลาดสำหรับคำอธิบายประกอบใน IntelliJ IDEA ได้อย่างไร แต่วิธีแก้ปัญหาที่ได้รับไม่ได้ผล พวกเขาบอกว่าฉันต้องดำเนินการต่อไปนี้: ในโครงสร้างโครงการ | กล่องโต้ตอบโครงการเปลี่ยนระดับภาษาของโครงการเป็น 6.0 - @Override ในอินเทอร์เฟซ อย่างไรก็ตามระดับภาษาของโครงการคือ 6.0 ในขณะนี้ แต่ฉันยังคงเห็นข้อผิดพลาด Vic นี่คือหน้าต่างและไม่มีเวอร์ชัน JVM ในระดับภาษา (น่าเสียดายที่ฉันไม่สามารถโพสต์ภาพได้เนื่องจากฉันมีชื่อเสียง 10 ประการ)

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