คำถามติดแท็ก inner-classes

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

27
คลาสภายใน Java และคลาสที่ซ้อนกันแบบคงที่
อะไรคือความแตกต่างที่สำคัญระหว่างคลาสภายในและคลาสที่ซ้อนกันแบบคงที่ใน Java การออกแบบ / การนำไปใช้มีบทบาทในการเลือกหนึ่งในสิ่งเหล่านี้หรือไม่?

11
ไม่ใช่คลาส Java ที่ล้อมรอบ
ฉันกำลังพยายามสร้างเกม Tetris และฉันได้รับข้อผิดพลาดของคอมไพเลอร์ Shape is not an enclosing class เมื่อฉันพยายามสร้างวัตถุ public class Test { public static void main(String[] args) { Shape s = new Shapes.ZShape(); } } ฉันใช้คลาสภายในสำหรับแต่ละรูปร่าง นี่คือส่วนหนึ่งของรหัสของฉัน public class Shapes { class AShape { } class ZShape { } } ผมทำอะไรผิดหรือเปล่า ?

14
ความแตกต่างระหว่างสุดท้ายและสุดท้ายได้อย่างมีประสิทธิภาพ
ฉันเล่นกับ lambdas ในชวา 8 local variables referenced from a lambda expression must be final or effectively finalและฉันมาข้ามคำเตือน ฉันรู้ว่าเมื่อฉันใช้ตัวแปรภายในคลาสนิรนามพวกเขาจะต้องเป็นคนสุดท้ายในชั้นนอก แต่ยัง - อะไรคือความแตกต่างระหว่างขั้นสุดท้ายและสุดท้ายอย่างมีประสิทธิภาพ ?

1
เมื่อใดจึงจะปลอดภัยในการใช้คลาสภายใน (ไม่ระบุชื่อ)
ผมได้อ่านบทความบางอย่างเกี่ยวกับการรั่วไหลของหน่วยความจำใน Android และดูวิดีโอที่น่าสนใจนี้จาก Google I / O ในเรื่อง แต่ฉันก็ยังไม่เข้าใจแนวคิดและโดยเฉพาะอย่างยิ่งเมื่อมันมีความปลอดภัยหรือเป็นอันตรายต่อผู้ใช้เรียนภายในภายในกิจกรรม นี่คือสิ่งที่ฉันเข้าใจ: หน่วยความจำรั่วจะเกิดขึ้นหากอินสแตนซ์ของคลาสภายในมีชีวิตอยู่นานกว่าคลาสภายนอก (กิจกรรม) -> สิ่งนี้สามารถเกิดขึ้นได้ในสถานการณ์ใด ในตัวอย่างนี้ฉันคิดว่าไม่มีความเสี่ยงต่อการรั่วไหลเนื่องจากไม่มีวิธีใดที่การขยายคลาสแบบไม่ระบุชื่อOnClickListenerจะใช้งานได้นานกว่ากิจกรรมใช่ไหม final Dialog dialog = new Dialog(this); dialog.setContentView(R.layout.dialog_generic); Button okButton = (Button) dialog.findViewById(R.id.dialog_button_ok); TextView titleTv = (TextView) dialog.findViewById(R.id.dialog_generic_title); // *** Handle button click okButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } }); titleTv.setText("dialog title"); …

5
Java - ไม่สามารถเข้าถึงอินสแตนซ์ของประเภท Foo ได้
ฉันมีรหัสต่อไปนี้: class Hello { class Thing { public int size; Thing() { size = 0; } } public static void main(String[] args) { Thing thing1 = new Thing(); System.out.println("Hello, World!"); } } ฉันรู้ว่าThingไม่ทำอะไรเลย แต่ Hello, World ของฉันโปรแกรมรวบรวมได้โดยไม่ต้อง เป็นคลาสที่ฉันกำหนดไว้เท่านั้นที่ทำให้ฉันล้มเหลว และมันก็ปฏิเสธที่จะรวบรวม ฉันไปNo enclosing instance of type Hello is accessible."ที่บรรทัดที่สร้างสิ่งใหม่ ฉันเดาทั้ง: ฉันมีปัญหาระดับระบบ (ทั้งใน …

8
การได้รับของวัตถุชั้นนอกจากวัตถุชั้นใน
ฉันมีรหัสต่อไปนี้ innerฉันต้องการที่จะได้รับถือของวัตถุชั้นนอกใช้ที่ฉันสร้างวัตถุชั้นด้านใน ฉันจะทำมันได้อย่างไร public class OuterClass { public class InnerClass { private String name = "Peakit"; } public static void main(String[] args) { OuterClass outer = new OuterClass(); InnerClass inner = outer.new InnerClass(); // How to get the same outer object which created the inner object back? OuterClass anotherOuter = …

4
เหตุใดจึงใช้คลาสที่ซ้อนกันใน C ++
ใครช่วยชี้ให้ฉันดูแหล่งข้อมูลดีๆเพื่อทำความเข้าใจและใช้คลาสที่ซ้อนกันได้ ฉันมีเนื้อหาบางอย่างเช่นหลักการเขียนโปรแกรมและสิ่งต่าง ๆ เช่นIBM Knowledge Center - Nested Classes นี้ แต่ฉันยังคงมีปัญหาในการทำความเข้าใจวัตถุประสงค์ของพวกเขา มีคนช่วยฉันหน่อยได้ไหม

10
ทำไมคลาส Java ภายนอกสามารถเข้าถึงสมาชิกส่วนตัวของคลาสภายในได้
ฉันสังเกตว่าคลาสภายนอกสามารถเข้าถึงตัวแปรอินสแตนซ์ส่วนตัวของคลาสภายในได้ เป็นไปได้อย่างไร? นี่คือตัวอย่างรหัสที่แสดงให้เห็นถึงสิ่งเดียวกัน: class ABC{ class XYZ{ private int x=10; } public static void main(String... args){ ABC.XYZ xx = new ABC().new XYZ(); System.out.println("Hello :: "+xx.x); ///Why is this allowed?? } } เหตุใดพฤติกรรมนี้จึงอนุญาต


6
เป็นไปได้ไหมที่จะสร้างคลาสภายในแบบไม่ระบุชื่อใน Java Static
ใน Java คลาสที่ซ้อนกันสามารถเป็นstaticหรือไม่ก็ได้ หากเป็นstaticเช่นนั้นจะไม่มีการอ้างอิงถึงตัวชี้ของอินสแตนซ์ที่มีอยู่ (ยังไม่เรียกว่าคลาสภายในอีกต่อไปเรียกว่าคลาสที่ซ้อนกัน) การลืมสร้างคลาสที่ซ้อนกันstaticเมื่อไม่ต้องการการอ้างอิงนั้นอาจทำให้เกิดปัญหากับการรวบรวมขยะหรือการวิเคราะห์การหลบหนี เป็นไปได้ไหมที่จะสร้างคลาสภายในที่ไม่ระบุตัวตนstaticด้วย หรือคอมไพเลอร์คิดออกโดยอัตโนมัติ (ซึ่งทำได้เพราะไม่มีคลาสย่อยใด ๆ )? ตัวอย่างเช่นหากฉันทำการเปรียบเทียบแบบไม่ระบุตัวตนฉันแทบไม่ต้องการการอ้างอิงถึงภายนอกเลย: Collections.sort(list, new Comparator<String>(){ int compare(String a, String b){ return a.toUpperCase().compareTo(b.toUpperCase()); } }

4
วิธีการสร้างอินสแตนซ์คลาสภายในที่ไม่คงที่ภายในวิธีการคงที่?
ฉันมีรหัสต่อไปนี้: public class MyClass { class Inner { int s, e, p; } public static void main(String args[]) { Inner in; } } ถึงส่วนนี้รหัสก็ใช้ได้ แต่ฉันไม่สามารถสร้างอินสแตนซ์ 'in' ภายในวิธีการหลักเหมือนin = new Inner()ที่แสดงnon static field cannot be referenced in static contextได้ ฉันจะทำอย่างไร? ฉันไม่ต้องการที่จะทำให้ฉันInnerระดับคงที่

5
ชั้นในสามารถเข้าถึงตัวแปรส่วนตัวได้หรือไม่?
class Outer { class Inner { public: Inner() {} void func() ; }; private: static const char* const MYCONST; int var; }; void Outer::Inner::func() { var = 1; } const char* const Outer::MYCONST = "myconst"; ข้อผิดพลาดนี้เกิดขึ้นเมื่อฉันคอมไพล์กับคลาส Outer :: Inner 'ไม่มีสมาชิกชื่อ `var'
117 c++  inner-classes 

6
ขอบเขตของคลาสที่ซ้อนกัน?
ฉันพยายามทำความเข้าใจขอบเขตในคลาสที่ซ้อนกันใน Python นี่คือรหัสตัวอย่างของฉัน: class OuterClass: outer_var = 1 class InnerClass: inner_var = outer_var การสร้างคลาสไม่เสร็จสมบูรณ์และฉันได้รับข้อผิดพลาด: <type 'exceptions.NameError'>: name 'outer_var' is not defined การพยายามinner_var = Outerclass.outer_varไม่ได้ผล ฉันเข้าใจ: <type 'exceptions.NameError'>: name 'OuterClass' is not defined ฉันพยายามเข้าถึงแบบคงที่outer_varจากInnerClass. มีวิธีทำไหม?

10
Nested หรือ Inner Class ใน PHP
ฉันกำลังสร้างUser Classสำหรับเว็บไซต์ใหม่ของฉัน แต่คราวนี้ฉันคิดที่จะสร้างมันให้แตกต่างออกไปเล็กน้อย ... C ++ , Javaและแม้แต่Ruby (และอาจเป็นภาษาการเขียนโปรแกรมอื่น ๆ ) อนุญาตให้ใช้คลาสซ้อน / ชั้นในภายในคลาสหลักซึ่งช่วยให้เราสร้างโค้ดเชิงวัตถุและจัดระเบียบได้มากขึ้น ใน PHP ฉันต้องการทำสิ่งนี้: <?php public class User { public $userid; public $username; private $password; public class UserProfile { // some code here } private class UserHistory { // some code here } } ?> เป็นไปได้ใน PHP …
111 php  class  oop  nested  inner-classes 

11
จะเข้าถึงชั้นนอกจากชั้นในได้อย่างไร?
ฉันมีสถานการณ์เช่นนั้น ... class Outer(object): def some_method(self): # do something class Inner(object): def __init__(self): self.Outer.some_method() # <-- this is the line in question ฉันจะเข้าถึงOuterเมธอดของคลาสจากInnerคลาสได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.