ฉันมีวัตถุประเภท ElectronicProduct ซึ่งขยายผลิตภัณฑ์ ฉันพยายามเรียกใช้เมธอด loadFromFile() จากภายในคลาสลูก โดยให้ชื่อและประเภทอาร์กิวเมนต์ที่แน่นอน แต่วัตถุคลาสลูกกลับเรียกใช้ loadFromFile() จากคลาสพาเรนต์แทน ฉันจะหยุดสิ่งนี้ได้อย่างไร
รหัสมีดังนี้:
ElectronicProduct eProduct = new ElectronicProduct();
eProduct.loadFromFile(eProduct,bin);
อย่างไรก็ตาม มันเรียกใช้เมธอดในคลาสพาเรนต์ด้านล่าง:
public Product loadFromFile(Product aProduct, BufferedReader bin) throws IOException, ParseException{
//some code
}
แทนที่จะเป็นคลาสย่อยที่แสดงด้านล่าง:
public ElectronicProduct loadFromFile(Product aProduct, BufferedReader bin) throws IOException, ParseException{
// Some code
}
ฉันลองใช้ @Override ในเมธอดคลาสย่อย แต่เนื่องจากอันหนึ่งส่งคืนผลิตภัณฑ์และอีกอันส่งคืนผลิตภัณฑ์อิเล็กทรอนิกส์ ดูเหมือนว่าการแทนที่จะไม่ทำงาน ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.
แก้ไข
นี่แปลกมากเพราะตอนนี้มันเริ่มทำงานตามที่ฉันต้องการโดยไม่ได้เปลี่ยนแปลงอะไรเลย สถานการณ์ที่แตกต่างกันแต่สิ่งที่คล้ายกันเกิดขึ้นก่อนที่จะมีคำเตือนข้อผิดพลาด ฉันลบโค้ดและเขียนสิ่งเดียวกันทุกประการ จากนั้นจึงใช้งานได้ ฉันไม่ต้องการให้สิ่งนี้เกิดขึ้นโดยบังเอิญเนื่องจากเป็นการให้คะแนนงาน ไม่อยากออกนอกประเด็นแต่ต้องเกี่ยวข้องกัน กรุณาแนะนำถ้าใครรู้ว่าเกิดอะไรขึ้น?
แก้ไข*2
เพื่อตอบสนองต่อความคิดเห็นจาก Tiffado สาเหตุที่วัตถุ Product ถูกส่งเข้ามาและไม่ใช่วัตถุ ElectronicProduct นั้นเป็นเพราะภายในเมธอดคลาสลูกนั้น วัตถุ Product จะถูกส่งผ่านไปยังคลาสพาเรนต์ ถ้าฉันส่งออบเจ็กต์คลาสลูกไปยังวิธีลูกแทน จากนั้นส่งออบเจ็กต์ไปยังวิธีพาเรนต์แทน มันอาจไม่ได้ผล เนื่องจากฉันได้เรียนรู้ว่าคลาสพาเรนต์ไม่ 'เห็น' คลาสลูก โปรดแก้ไขฉันหากสิ่งนี้ไม่ถูกต้อง
public ElectronicProduct loadFromFile(Product aProduct, BufferedReader bin) throws IOException, ParseException{
ElectronicProduct eProduct = new ElectronicProduct();
eProduct = (ElectronicProduct)super.loadFromFile(aProduct,bin);
eProduct.setGuarunteeDuration(Integer.valueOf(bin.readLine()));
return eProduct;
}