-
คลาสภายในมีอะไรบ้าง?
- คลาสที่ซ้อนกันแบ่งออกเป็นสองประเภท: แบบคงที่และแบบไม่คงที่
- คลาสที่ซ้อนกันที่ประกาศเป็นสแตติกเรียกว่าคลาสที่ซ้อนกันแบบสแตติก
- คลาสที่ไม่คงที่แบบซ้อนกันเรียกว่าคลาสภายใน
-
คลาสภายในที่ไม่เปิดเผยตัวตนคอมไพล์เพื่ออะไร?
ไปยังคลาสที่ไม่คงที่ภายใน
-
เหตุใดจึงต้องใช้คำหลัก
final
เมื่อสร้างคลาสที่ไม่ระบุชื่อหากมีการกำหนดคลาสภายในที่ไม่ระบุชื่อและจำเป็นต้องใช้อ็อบเจ็กต์ที่กำหนดไว้ภายนอกคลาสภายในนี้ คอมไพลเลอร์ต้องการให้การอ้างอิงที่ส่งถึงคลาสนั้นถูกประกาศว่าไม่เปลี่ยนรูป (ขั้นสุดท้าย) หากไม่มีการประกาศดังกล่าว คุณจะได้รับข้อผิดพลาดเมื่อคอมไพล์โปรแกรม
-
จะสร้างวัตถุคลาสภายในอย่างถูกต้องได้อย่างไร?
คลาสภายใน (ไม่คงที่) เช่นเดียวกับตัวแปรและวิธีการ เชื่อมโยงกับอ็อบเจ็กต์ของคลาสภายนอก คลาสภายในยังสามารถเข้าถึงฟิลด์ของคลาสภายนอกได้โดยตรง คลาสดังกล่าวไม่สามารถมีวิธีการและฟิลด์แบบคงที่ได้ คลาสภายในไม่สามารถดำรงอยู่ได้หากไม่มีอินสแตนซ์ของคลาสภายนอก หากต้องการสร้างวัตถุ:
Outer outer = new Outer(); Innter inner = outer.new Inner();
-
จะสร้างวัตถุของคลาสที่ซ้อนกันได้อย่างไร?
ไวยากรณ์สำหรับการสร้างวัตถุคลาสที่ซ้อนกันคือ:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
-
เป็นไปได้ไหมที่จะสร้างวิธีการ/ตัวแปรแบบคงที่ในคลาสภายใน?
ไม่สามารถประกาศวิธีการ/ตัวแปรแบบคงที่ในคลาสภายในได้ (ไม่ใช่คลาสที่ซ้อนกัน)
คลาสภายใน (ไม่คงที่) เช่นเดียวกับตัวแปรและวิธีการ เชื่อมโยงกับอ็อบเจ็กต์ของคลาสภายนอก คลาสดังกล่าวไม่สามารถมีวิธีการและฟิลด์แบบคงที่ได้
-
ตั้งชื่อคลาสภายในสามคลาสใด ๆ บ้างไหม?
private static class Holder
— คลาสที่ซ้อนกันHashMap
จากjava.util
.- อินเทอร์เฟซ
Map
มีinterface Entry<K,V>
ซึ่งกลับมาอีกครั้งHashMap
และถูกนำไปใช้ในคลาสที่ซ้อนกันstatic class Entry<K,V> implements Map.Entry<K,V>
อื่น private static class IntegerCache
ในชั้นเรียนInteger
.
-
คลาสภายในแก้ปัญหาการสืบทอดหลายรายการใน Java ได้อย่างไร
เพราะ Java ห้ามการสืบทอดหลายคลาส ปัญหานี้ได้รับการแก้ไขด้วยความช่วยเหลือของคลาสภายใน: ในคลาสที่เราต้องการ เราประกาศคลาสภายในและสืบทอดจากคลาสที่ต้องการ ตัวอย่าง:
class Tiger extends Cat { public void tigerRun() { ..... } public void startTiger() { TigerThread thread = new TigerThread(); thread.start(); } class TigerThread extends Thread { public void run() { tigerRun(); } } }
-
อะไรคือความแตกต่างระหว่างคลาสที่ไม่ระบุชื่อตามอินเทอร์เฟซและตามคลาส?
คลาสที่ไม่ระบุชื่อตาม JLS 15.9.5 เป็นนิพจน์ที่รวมการประกาศคลาสใหม่และการเริ่มต้นเข้าด้วยกัน:
- เมื่อประกาศคลาส คลาสใหม่จะถูกสร้างขึ้นซึ่งได้มาจากคลาสที่ระบุเมื่อใช้เป็นฐานของคลาสอื่น หรือใช้อินเทอร์เฟซเมื่อใช้เป็นฐานของอินเทอร์เฟซ
- ในระหว่างการเริ่มต้น ออบเจ็กต์ใหม่จะถูกสร้างขึ้นและการอ้างอิงจะถูกส่งกลับ: คลาสที่ไม่ระบุตัวตนเป็นรูปธรรม
ดังนั้นความแตกต่างเพียงอย่างเดียวในคลาสที่ไม่ระบุชื่อตามอินเทอร์เฟซและคลาสคือจำนวนวิธีนามธรรมที่จำเป็นต้องนำไปใช้
Инициализации анонимного класса на основе интерфейса потребует реализации каждого метода, в то время How при инициализации анонимного класса на основе абстрактного/конкретного класса позволит изменить поведение за счет перегрузки методов и потребует реализации абстракных методов.
-
Можно ли создать анонимный статический вложенный класс?
Нет, статической становится только переменная, но не класс.
GO TO FULL VERSION