คำตอบ:
แน่นอน.
การประกาศบทคัดย่อของคลาสหมายความว่าคุณไม่อนุญาตให้สร้างอินสแตนซ์ด้วยตัวเองเท่านั้น
การประกาศนามธรรมของวิธีการหมายความว่าคลาสย่อยต้องจัดเตรียมการนำไปใช้สำหรับวิธีการนั้น
ทั้งสองเป็นแนวคิดที่แยกจากกันแม้ว่าจะเห็นได้ชัดว่าคุณไม่มีวิธีการที่เป็นนามธรรมในชั้นเรียนที่ไม่ใช่นามธรรม คุณสามารถมีคลาสนามธรรมด้วยfinal
วิธีการได้ แต่ไม่ต้องใช้วิธีอื่น
ใช่คุณสามารถทำได้ ทำไมคุณไม่ลองทำดูล่ะ?
ใช่คุณสามารถ. คลาสนามธรรมที่ใช้ใน java หมายความว่าคุณไม่สามารถสร้างอ็อบเจกต์ของคลาสได้ และวิธีนามธรรมที่คลาสย่อยต้องจัดเตรียมการนำไปใช้สำหรับวิธีการนั้น
ดังนั้นคุณสามารถกำหนดคลาสนามธรรมได้อย่างง่ายดายโดยไม่ต้องใช้วิธีนามธรรม
ตัวอย่างเช่น:
public abstract class AbstractClass{
public String nonAbstractMethodOne(String param1,String param2){
String param = param1 + param2;
return param;
}
public static void nonAbstractMethodTwo(String param){
System.out.println("Value of param is "+param);
}
}
แค่นี้ก็เรียบร้อย
ใช่คุณสามารถสร้างคลาสนามธรรมโดยไม่ต้องใช้วิธีนามธรรมใด ๆ ตัวอย่างที่ดีที่สุดของคลาสนามธรรมโดยไม่มีวิธีนามธรรมคือ HttpServlet
Abstract Method เป็นวิธีการที่ไม่มีเนื้อความหากคุณประกาศอย่างน้อยหนึ่งวิธีในชั้นเรียนจะต้องประกาศคลาสนั้นเป็น บทคัดย่อมันบังคับ แต่ถ้าคุณประกาศคลาสนามธรรมมันไม่บังคับให้ประกาศวิธีนามธรรมในคลาส
คุณไม่สามารถสร้างวัตถุของคลาสนามธรรมซึ่งหมายความว่าไม่สามารถสร้างอินสแตนซ์ได้
ได้คุณสามารถประกาศคลาสที่คุณไม่สามารถสร้างอินสแตนซ์ได้ด้วยตัวเองด้วยวิธีการที่มีการใช้งานอยู่แล้วเท่านั้น สิ่งนี้จะมีประโยชน์หากคุณต้องการเพิ่มวิธีนามธรรมในอนาคตหรือหากคุณไม่ต้องการให้คลาสถูกสร้างอินสแตนซ์โดยตรงแม้ว่าจะไม่มีคุณสมบัตินามธรรมก็ตาม
ใช่เราสามารถประกาศคลาสนามธรรมได้โดยไม่ต้องใช้วิธีนามธรรม จุดประสงค์ของการประกาศคลาสเป็นนามธรรมไม่ใช่เพื่อสร้างอินสแตนซ์ของคลาส
สองกรณี
1) คลาสนามธรรมด้วยวิธีนามธรรม
คลาสประเภทนี้เราต้องสืบทอดคลาสจากคลาสนามธรรมนี้และต้องแทนที่เมธอดนามธรรมในคลาสของเราเช่นคลาส GenricServlet
2) คลาสนามธรรมโดยไม่มีวิธีนามธรรม
ประเภทของคลาสเหล่านี้เราต้องสืบทอดคลาสจากคลาสนามธรรมนี้เช่นวัตถุประสงค์ของคลาส HttpServlet คือแม้ว่าคุณจะไม่ใช้ตรรกะของคุณในคลาสย่อยคุณก็จะได้รับตรรกะหลัก
ใช่เราสามารถมีคลาสนามธรรมได้โดยไม่ต้องใช้วิธีนามธรรมเนื่องจากทั้งสองเป็นแนวคิดอิสระ การประกาศคลาสนามธรรมหมายความว่าไม่สามารถสร้างอินสแตนซ์ได้ด้วยตัวเองและสามารถแบ่งได้เฉพาะคลาสย่อยเท่านั้น การประกาศ method abstract หมายความว่า Method จะถูกกำหนดไว้ใน subclass
ใช่คุณสามารถทำได้
การประกาศคลาสนามธรรมหมายความว่าคลาสจะไม่ถูกสร้างอินสแตนซ์โดยคลาสอื่น ๆ
และควรมีวิธีนามธรรมอย่างน้อยหนึ่งวิธีในนั้นและความหมายของวิธีนั้นคุณสามารถประกาศวิธีนามธรรมในชั้นเรียนนั้นได้หากคุณไม่ได้ประกาศวิธีการที่ดีกว่าวิธีที่ใช้ได้
ตัวอย่าง:
public abstract class abs {
protected int cx = 0, cy = 0;
public void p() {
System.out.print("hello");
}
}
สิ่งนี้จะได้ผลอย่างแน่นอน
ใช่คุณสามารถ. บางครั้งคุณอาจถูกถามคำถามนี้ว่าจุดประสงค์ที่ทำคืออะไร? คำตอบคือบางครั้งเราต้อง จำกัด คลาสจากการสร้างอินสแตนซ์ด้วยตัวมันเอง ในกรณีนี้เราต้องการให้ผู้ใช้ขยายคลาส Abstract และสร้างอินสแตนซ์คลาสย่อย
ได้คุณสามารถกำหนดคลาสนามธรรมได้โดยไม่ต้องใช้วิธีนามธรรม อย่างไรก็ตามหากไม่มีวิธีการภายในคุณควรใช้อินเทอร์เฟซ
คุณสามารถคำถามในใจของฉันคือคุณควร ตั้งแต่แรกฉันจะบอกว่าไม่มีคำตอบที่ยากและรวดเร็ว ทำสิ่งที่ถูกต้องสำหรับสถานการณ์ปัจจุบันของคุณ
มรดกสำหรับฉันหมายถึงความสัมพันธ์ 'is-a' ลองนึกภาพคลาสสุนัขซึ่งสามารถขยายได้ตามประเภทย่อยที่เชี่ยวชาญกว่า (อัลเซเชี่ยนพุดเดิ้ล ฯลฯ ) ในกรณีนี้การทำให้คลาสสุนัขเป็นนามธรรมอาจเป็นสิ่งที่ถูกต้องเนื่องจากประเภทย่อยคือสุนัข ลองจินตนาการว่าสุนัขต้องมีปลอกคอ ในกรณีนี้การถ่ายทอดทางพันธุกรรมไม่สมเหตุสมผล: เป็นเรื่องไร้สาระที่จะมีความสัมพันธ์แบบ 'is-a' ระหว่างสุนัขและปลอกคอ นี่คือความสัมพันธ์แบบ 'has-a' อย่างแน่นอนปลอกคอเป็นวัตถุที่ทำงานร่วมกัน การทำปกเป็นนามธรรมเพื่อให้สุนัขสามารถมีได้นั้นไม่สมเหตุสมผล
ฉันมักจะพบว่าคลาสนามธรรมที่ไม่มีวิธีการทางนามธรรมนั้นแสดงออกถึงความสัมพันธ์แบบ 'has-a' จริงๆ ในกรณีเหล่านี้ฉันมักจะพบว่ารหัสสามารถแยกตัวประกอบได้ดีกว่าโดยไม่ต้องใช้การสืบทอด ฉันยังพบว่าคลาสนามธรรมที่ไม่มีวิธีนามธรรมมักจะเป็นกลิ่นรหัสและอย่างน้อยที่สุดก็ควรนำไปสู่คำถามที่เกิดขึ้นในการทบทวนโค้ด
อีกครั้งนี่เป็นเรื่องส่วนตัวทั้งหมด อาจมีสถานการณ์เกิดขึ้นเมื่อคลาสนามธรรมที่ไม่มีวิธีการทางนามธรรมที่สมเหตุสมผลมันขึ้นอยู่กับการตีความและเหตุผล ตัดสินใจอย่างดีที่สุดสำหรับสิ่งที่คุณกำลังทำอยู่
จริงๆแล้วไม่มีความหมายถ้าคลาสนามธรรมไม่มีวิธีนามธรรม ชนชั้นนามธรรมเปรียบเสมือนพ่อ พ่อคนนี้มีคุณสมบัติและพฤติกรรมบางอย่างเมื่อคุณเป็นเด็กอยากเป็นลูกของพ่อพ่อบอกว่าลูก (คุณ) ต้องเป็นแบบนี้มันคือ MOTO ของเราและถ้าคุณไม่อยากทำคุณ ไม่ใช่ลูกของฉัน
WindowDecorator
และCoffeeDecorator
เป็นabstract
คลาส แต่ไม่มีabstract
วิธีการ