คลาส Java ภายใน
1. หมวดหมู่ภายในคืออะไร?
คำจำกัดความของคลาสหนึ่งอยู่ในคลาสอื่นและคลาสนี้เรียกว่าคลาสภายใน
2. ลักษณะของชั้นเรียนภายในคืออะไร?
1. ชั้นเรียนภายในยังคงเป็นคลาสอิสระ หลังจากการรวบรวมคลาสชั้นในจะถูกรวบรวมเป็นไฟล์. class อิสระ แต่นำหน้าด้วยชื่อคลาสและสัญลักษณ์ $ ของชั้นนอก
2. คลาสภายในไม่สามารถเข้าถึงได้ในรูปแบบปกติ คลาสด้านในเป็นสมาชิกของชั้นนอกดังนั้นคลาสด้านในสามารถเข้าถึงตัวแปรสมาชิกของชั้นนอกได้อย่างอิสระไม่ว่าจะเป็นส่วนตัวหรือไม่
3. หากคลาสภายในถูกประกาศว่าเป็นแบบคงที่จะไม่สามารถเข้าถึงตัวแปรสมาชิกของคลาสภายนอกได้ตามต้องการ ในเวลานี้คลาสภายในสามารถเข้าถึงตัวแปรสมาชิกคงที่ของคลาสภายนอกเท่านั้น
3. หมวดหมู่ภายในคืออะไร?
1. คลาสสมาชิกภายใน
ชอบ:
แพ็คเกจ com.test01; คลาสสาธารณะ A {// ชั้นในคลาส B สืบทอด testpojo และใช้ testinterface อินเตอร์เฟสคลาส B ขยาย testpojo ใช้ testinterface {// วิธีการของคลาส B ของตัวเอง } // การเขียนใหม่วิธีอินเตอร์เฟสโมฆะ public void testf () {system.out.println ("ใช้อินเตอร์เฟส!"); }} // เรียกการทดสอบโมฆะสาธารณะคลาสภายใน () {b b = ใหม่ b (); b.testf (); // ใช้วิธีการเขียนอินเตอร์เฟส rewrite b.run (); // เรียกวิธีการของคุณเอง b.testpojo (); // วิธีการโทรที่สืบทอดคลาสแม่} // วิธีการหลักทดสอบโมฆะคงที่สาธารณะหลัก (สตริง [] args) {a = new a (); a.test (); }} // กำหนดอินเทอร์เฟซวิธีการคือ testf () อินเตอร์เฟส testinterface {โมฆะสาธารณะ testf ();} // กำหนดวิธีการคลาสปกติ testpojo () คลาส testpojo {โมฆะสาธารณะ testpojo () {system.out.out.println ("ฉันเป็นคลาส pojo ที่เรียบง่าย"); }} // นำไปใช้เพื่อเรียกใช้วิธีการในคลาสคลาสชั้นใน textone {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ab b = ใหม่ a () ใหม่ b (); // การเรียกคลาส B ในคลาส A /** เทียบเท่ากับรหัสต่อไปนี้* a = new a (); * ab b = a.new b (); * */ b.testf (); // ใช้วิธีการเขียนอินเตอร์เฟส rewrite b.run (); // เรียกวิธีการของคุณเอง b.testpojo (); // การเรียกวิธีการที่สืบทอดคลาสพาเรนต์}}}2. เมธอดชั้นเรียนภายใน
แพ็คเกจ com.test01; คลาสสาธารณะ pertest {public void test () {// กำหนดเมธอดคลาส NE {// กำหนดวิธีการภายในชั้นเรียนภายในโมฆะสาธารณะ fle () {// กำหนดวิธีการชั้นเรียนภายในระบบ - ใหม่ ne (). fle (); // การเรียกวิธีการของคลาสชั้นใน} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {new pertest (). test (); //ทดสอบ}} หมายเหตุ: (1) คลาส Method Internal สามารถสร้างอินสแตนซ์ภายในวิธีที่กำหนดคลาสภายในและไม่สามารถสร้างอินสแตนซ์นอกวิธีนี้ได้
(2) วัตถุเมธอดภายในคลาสคลาสไม่สามารถใช้ตัวแปรท้องถิ่นที่ไม่ใช่รอบรองชนะเลิศของวิธีการที่คลาสชั้นในตั้งอยู่
เนื่องจากตัวแปรท้องถิ่นของวิธีการอยู่บนสแต็กพวกเขามีอยู่ในช่วงชีวิตของวิธีการเท่านั้น เมื่อวิธีการสิ้นสุดโครงสร้างสแต็กจะถูกลบ
ตัวแปรท้องถิ่นกลายเป็นประวัติศาสตร์ อย่างไรก็ตามหลังจากวิธีการเสร็จสิ้นวัตถุคลาสด้านในที่สร้างขึ้นภายในวิธีการอาจยังคงมีอยู่ในฮีป!
ตัวอย่างเช่นหากการอ้างอิงถึงมันถูกส่งผ่านไปยังรหัสอื่นและถูกเก็บไว้ในตัวแปรสมาชิก เนื่องจากตัวแปรในท้องถิ่นไม่สามารถรับประกันได้ว่าจะมีอายุยืนยาวเหมือนกับของเมธอดวัตถุคลาสภายในวัตถุคลาสภายในไม่สามารถใช้งานได้ (ความเข้าใจนี้มาจากสารานุกรม Baidu)
3. ชั้นเรียนภายในที่ไม่ระบุชื่อ
1) ชั้นเรียนภายในที่ไม่ระบุชื่อ
แพ็คเกจ com.anonymous; คลาสสาธารณะ AbstractClass {Public Void Test () {// วิธีการคือทดสอบ testa a = testa ใหม่ () {// ใช้บทคัดย่อคลาส @Override โมฆะสาธารณะเรียกใช้ () {// ใช้ระบบนามธรรมคลาส - a.run (); // การเรียกวิธีการของคลาสชั้นใน} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {abstractClass ใหม่ (). ทดสอบ (); // test}} // กำหนดวิธีนามธรรมบทคัดย่อบทคัดย่อเป็นบทคัดย่อ () บทคัดย่อคลาส testa {public abstract void run ();}2) อินเทอร์เฟซคลาสภายในที่ไม่ระบุชื่อ
แพ็คเกจ com.anonymous; Public Class Testanonymous {MyInterface M = ใหม่ myInterface () {// ใช้อินเทอร์เฟซโมฆะสาธารณะ Eat () {// เขียนวิธีการอินเทอร์เฟซ MyInterface System.out.println ("ฉันกำลังทานอาหาร!"); - โมฆะสาธารณะ SS () {// วิธีการ SS M.EAT (); // เรียกวิธีที่เขียนทับ} โมฆะคงที่สาธารณะหลัก (สตริง [] args) {testanonymous ใหม่ (). ss (); // ทดสอบ}} // กำหนดวิธีการเชื่อมต่อเป็น EatInterface MyInterface {โมฆะสาธารณะ Eat ();}หมายเหตุ: คลาสภายในที่ไม่ระบุชื่อสามารถกำหนดได้ภายในวิธีการหรือในสมาชิกของชั้นเรียน ไม่ว่าชั้นเรียนชั้นในที่ไม่ระบุชื่อจะไม่สามารถเรียกได้โดยตรงจากชั้นเรียนภายนอก
4. บทบาทของหมวดหมู่ภายในคืออะไร?
แต่ละคลาสภายในสามารถสืบทอดได้อย่างอิสระจากการใช้งาน (อินเตอร์เฟส) ดังนั้นไม่ว่าจะเป็นคลาสอุปกรณ์ต่อพ่วงที่สืบทอดการใช้งาน (อินเตอร์เฟส) ไม่มีผลต่อคลาสชั้นในหรือไม่ หากไม่มีความสามารถในการจัดทำคลาสภายในเพื่อสืบทอดคลาสคอนกรีตหรือนามธรรมหลายชั้นปัญหาการออกแบบและการเขียนโปรแกรมบางอย่างยากที่จะแก้ไข จากมุมมองนี้คลาสภายในทำให้การแก้ปัญหาการสืบทอดหลายครั้งเสร็จสมบูรณ์
อินเทอร์เฟซแก้ปัญหาบางอย่างในขณะที่คลาสภายในใช้ "การสืบทอดหลายอย่าง" ได้อย่างมีประสิทธิภาพ
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!