Inner Class ใน Java คืออะไร?

เผยแพร่แล้ว: 2022-04-29

แนวคิดของ inner class ใน Java เป็นพื้นฐานของการเขียนโปรแกรม Java ใน Java คลาสที่ซ้อนกันและคลาสภายในเป็นแนวคิดที่คล้ายกันมากแต่แตกต่างกันเล็กน้อยในการออกแบบคลาสและมักจะไปพร้อมกัน

คลาสที่ซ้อนกันถูกกำหนดไว้ภายในคลาสอื่นและมีสองประเภท - คลาสที่ซ้อนกันแบบสแตติกและคลาสที่ซ้อนกันแบบไม่คงที่ ในทางกลับกัน คลาสภายในเป็นประเภทของคลาสที่ซ้อนกันแบบ non-static และยังมีอีกสามประเภท – คลาสสมาชิกภายใน คลาสภายในที่ไม่ระบุชื่อ และคลาสภายในภายใน

ดังนั้นคลาสภายในทั้งสามประเภทนี้หมายถึงอะไรและมีประโยชน์อย่างไร? อ่านต่อไปเพื่อค้นหาคำแนะนำโดยละเอียดเกี่ยวกับ Java inner class

สารบัญ

ความหมายของชั้นในในภาษาชวา

คลาสที่ซ้อนกันแบบไม่คงที่หรือคลาสภายในถูกกำหนดไว้ภายในคลาสอื่น และสามารถเข้าถึงสมาชิกของคลาสภายนอก (คลาสที่ล้อมรอบ) ในทางตรงกันข้าม คลาสที่ซ้อนกันแบบสแตติกยังเป็นคลาสที่กำหนดไว้ภายในคลาสอื่นด้วย แต่ไม่เหมือนกับคลาสที่ซ้อนกันแบบสแตติก มันไม่สามารถเข้าถึงตัวแปรสมาชิกของคลาสภายนอกได้ ในกรณีของคลาสที่ซ้อนกันแบบ non-static เราไม่จำเป็นต้องสร้างอินสแตนซ์ของคลาสภายนอก แต่ในกรณีของชั้นใน เราต้องยกตัวอย่างชั้นนอกก่อนจึงจะสามารถยกตัวอย่างชั้นในได้

แหล่งที่มา

ประเภทของชั้นในใน Java

ใน Java คลาสภายในมีสามประเภทต่อไปนี้:

  • สมาชิกชั้นใน
  • ชั้นในนิรนาม
  • ชั้นในของท้องถิ่น

ตอนนี้ ให้เราเข้าใจแต่ละประเภทของชั้นในด้วยตัวอย่าง

1. สมาชิกชั้นใน

คลาสภายในของสมาชิกใน Java เป็นคลาสที่ซ้อนกันแบบไม่คงที่ที่สร้างขึ้นภายในคลาส แต่อยู่นอกเมธอด เรียกอีกอย่างว่า inner class ปกติ สมาชิก inner class สามารถประกาศได้ด้วย access modifiers เช่น private, public, default และ protected

ไวยากรณ์สำหรับคลาสภายในของสมาชิกมีดังนี้:

ชั้นนอก{

//รหัส

ชั้นใน{

//รหัส

}

}

สมาชิกชั้นในในตัวอย่าง Java:

รับด้านล่างเป็นโปรแกรมเพื่อสาธิตวิธีสร้างคลาสภายในและเข้าถึง เราจะทำให้คลาสภายในเป็นส่วนตัวและใช้วิธี display_Inner() เพื่อเข้าถึงคลาส

คลาส DemoOuter {

จำนวนเต็ม;

//ชั้นใน

DemoInner คลาสส่วนตัว {

พิมพ์โมฆะสาธารณะ () {

System.out.println("นี่คือชั้นใน");

}

}

// เข้าถึง inner class จาก method within

เป็นโมฆะ display_Inner () {

ภายใน DemoInner = ใหม่ DemoInner ();

inner.print();

}

}

MyClass คลาสสาธารณะ {

โมฆะคงที่สาธารณะหลัก (สตริง args []) {

// ยกตัวอย่างชั้นนอก

DemoOuter ด้านนอก = DemoOuter ใหม่ ();

// การเข้าถึงเมธอด display_Inner()

outer.display_Inner();

}

}

ผลลัพธ์: นี่คือคลาสชั้นใน

ในตัวอย่างข้างต้น OuterDemo คือคลาสภายนอก InnerDemo คือคลาสภายใน เรากำลังสร้างอินสแตนซ์ของคลาสภายในภายในเมธอด display_Inner() ซึ่งเรียกใช้จากเมธอดหลัก

สำรวจหลักสูตรวิศวกรรมซอฟต์แวร์ยอดนิยมของเรา

เอสแอล. ไม่ โปรแกรมพัฒนาซอฟต์แวร์
1 วิทยาศาสตรมหาบัณฑิตสาขาวิทยาการคอมพิวเตอร์จาก LJMU & IIITB โปรแกรมใบรับรองความปลอดภัยทางไซเบอร์ของ Caltech CTME
2 Bootcamp การพัฒนาเต็มกอง โปรแกรม PG ใน Blockchain
3 Executive Post Graduate Program in Software Development - Specialization in DevOps ดูหลักสูตรวิศวกรรมซอฟต์แวร์ทั้งหมด

2. ชั้นในนิรนาม

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

ไวยากรณ์สำหรับคลาสภายในที่ไม่ระบุชื่อใน Java มีดังนี้:

AnonymousInner an_inner = ใหม่ AnonymousInner () {

โมฆะสาธารณะ my_method() {

//รหัส

}

};

คลาสภายในที่ไม่ระบุชื่อใน Java สามารถสร้างได้สองวิธี:

  1. ใช้คลาส
  2. การใช้อินเทอร์เฟซ

คลาสภายในที่ไม่ระบุชื่อในตัวอย่าง Java (โดยใช้คลาส):

อาหารระดับนามธรรม{

นามธรรมเป็นโมฆะกิน ();

}

คลาส TestAnonymousInner{

โมฆะคงที่สาธารณะหลัก (สตริง args[]){

มื้อ m=มื้อใหม่(){

โมฆะกิน (){System.out.println("Bon appetit!");}

};

เนื้อ();

}

}

ผลลัพธ์: อร่อยดี!

คลาสภายในที่ไม่ระบุชื่อในตัวอย่าง Java (โดยใช้อินเทอร์เฟซ):

เกมอินเทอร์เฟซ{

การเล่นเป็นโมฆะ ();

}

คลาส TestAnnoonymousInner1{

โมฆะคงที่สาธารณะหลัก (สตริง args[]){

เกม g = เกมใหม่ (){

การเล่นเป็นโมฆะสาธารณะ(){System.out.println("เกมกลางแจ้ง");}

};

g.play();

}

}

เอาท์พุต: เกมกลางแจ้ง

3. ชั้นในของท้องถิ่น

คลาสภายในท้องถิ่นใน Java เป็นคลาสที่สร้างขึ้นภายในเมธอด ในกรณีของตัวแปรโลคัล ขอบเขตของคลาสภายในโลคัลยังคงถูกจำกัดภายในเมธอด

คลาสภายในโลคัลถูกกำหนดไว้ภายในบล็อก: เนื้อหาของเมธอด, if clause หรือ for loop คลาสภายในท้องถิ่นไม่ได้เป็นสมาชิกของคลาสที่ปิดล้อมใด ๆ แต่เป็นของบล็อกภายในที่กำหนด ดังนั้น แม้ว่าคลาสภายในโลคัลใน Java จะไม่สามารถมีตัวแก้ไขการเข้าถึงที่เชื่อมโยงอยู่ได้ คุณสามารถทำเครื่องหมายว่าเป็นนามธรรมหรือขั้นสุดท้ายได้ ถ้าเราต้องการเรียกใช้ method ของ local inner class เราต้องสร้าง class ภายใน method

คลาสภายในท้องถิ่นในตัวอย่าง Java:

ด้านล่างนี้คือโปรแกรมตัวอย่างเพื่อสาธิตวิธีการยกตัวอย่างอ็อบเจ็กต์ของคลาสภายในภายในที่ประกาศภายในเมธอดของคลาสภายนอก

แพ็คเกจ innerClass;

คลาสสาธารณะ Outer_Class

{

// เมธอดอินสแตนซ์ของคลาส Outer_Class

การแสดงโมฆะสาธารณะ ()

{

// ประกาศเมธอดภายในคลาสภายใน

คลาส Inner_Class

{

โมฆะสาธารณะ msg(){

System.out.println(“นี่คือคลาสภายในท้องถิ่น!”);

}

}

// สร้างอินสแตนซ์ของเมธอดภายในคลาสและเรียกใช้เมธอด msg() โดยใช้ตัวแปรอ้างอิงอ็อบเจ็กต์ i

Inner_Class i = ใหม่ Inner_Class();

i.msg();

}

โมฆะคงที่สาธารณะ main(String[] args)

{

// สร้างวัตถุของคลาสภายนอก Outer_Class

Outer_Class o = ใหม่ Outer_Class ();

o.display();

}

}

ผลลัพธ์: นี่คือคลาสภายในท้องถิ่น!

ด้วยพื้นฐานของ Java inner class ให้เราเข้าใจว่าทำไมเราถึงต้องการมันตั้งแต่แรก

ข้อดีของ Java Inner Class

คลาสภายในใน Java นำสามยูทิลิตี้ที่สำคัญมาสู่ตาราง เหล่านี้มีดังนี้:

1. เนื่องจาก Java inner class สามารถเข้าถึงข้อมูลสมาชิกและ method ของ outer/main class รวมถึง private จึงแสดงถึงความสัมพันธ์เฉพาะประเภท

2. คลาสภายในของ Java ลดการเข้ารหัสลงอย่างมากเนื่องจากต้องการการเขียนน้อยกว่า

3. คลาสภายในใน Java จะจัดกลุ่มคลาสและอินเทอร์เฟซอย่างมีเหตุผลในที่เดียว ดังนั้นจึงช่วยเพิ่มความสามารถในการอ่านโค้ดและทำให้ง่ายต่อการบำรุงรักษา

สรุป

แนวคิดของคลาสที่ซ้อนกันทำให้ง่ายขึ้นและเพิ่มความยืดหยุ่นในการสร้างคลาสได้ทุกที่ในการเขียนโปรแกรม Java ในเรื่องนี้คลาสที่ซ้อนกันแบบ non-static ที่รู้จักกันในชื่อ inner class นั้นมีประโยชน์อย่างยิ่ง ดังที่เราได้เห็นในการสนทนาของเราแล้ว

เราต้องการสรุปโดยระบุสองกรณีที่การใช้ inner class ดูเหมาะสมที่สุด ประการแรก คลาสภายในของ Java นั้นเหมาะสมที่สุดเมื่อสองคลาสมีความสัมพันธ์ใกล้ชิดและคลาสอื่นไม่สามารถเข้าถึงได้ และประการที่สอง คลาสภายในเป็นเรื่องธรรมดาในการจัดการเหตุการณ์การเขียนโปรแกรม Java GUI ดังนั้น คลาสภายในของ Java สามารถใช้ได้อย่างปลอดภัยเมื่อผู้ฟังและส่วนประกอบ GUI เกี่ยวข้อง

สงสัยว่าจะเรียน Java ที่ไหน?

การรับรอง PG ที่เชื่อมโยงกับงานของ upGrad ในสาขาวิศวกรรมซอฟต์แวร์ คือสิ่งที่คุณกำลังมองหา!

การรับรอง PG ที่เชื่อมโยงกับงานของ upGrad ในสาขาวิศวกรรมซอฟต์แวร์ ได้รับการออกแบบมาเป็นพิเศษสำหรับนักศึกษาจบใหม่และปีสุดท้าย ซึ่ง เหมาะอย่างยิ่งสำหรับผู้ที่ต้องการเรียนรู้การเขียนโปรแกรมและรับตำแหน่งในบทบาทซอฟต์แวร์ระดับเริ่มต้น โปรแกรมออนไลน์ 5 เดือนนี้จะสอนทักษะซอฟต์แวร์ชั้นนำ เช่น Java, JavaScript, HTML5, DSA, AWS, MERN และอีกมากมาย!

จุดเด่นของโปรแกรม:

  • ความเชี่ยวชาญใน MERN Stack/Cloud-Native
  • การเรียนรู้ออนไลน์มากกว่า 500 ชั่วโมง
  • การฝึกปฏิบัติจริงมากกว่า 350 ชั่วโมง
  • 50+ เซสชันสด
  • ห้าโครงการอุตสาหกรรม
  • การสร้างเครือข่ายกับผู้เชี่ยวชาญในอุตสาหกรรม
  • ฟอรัมถาม & ตอบกับเพื่อนและผู้เชี่ยวชาญในอุตสาหกรรม
  • การสนับสนุนการเรียนรู้จากผู้ช่วยสอนและพี่เลี้ยงในอุตสาหกรรม

ลงทะเบียนวันนี้ เพื่อเรียนรู้จากผู้เชี่ยวชาญในอุตสาหกรรมนี้!

ความแตกต่างระหว่างคลาสภายในและคลาสย่อยคืออะไร?

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

เราสามารถเขียนคลาสในคลาสใน Java ได้หรือไม่?

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

Java inner class สามารถเป็นแบบส่วนตัวได้หรือไม่?

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