บทช่วยสอนJava

Java HOME Java Intro Java เริ่มต้น Java Syntax ความคิดเห็นของ Java ตัวแปร Java Java Data Types การหล่อแบบจาวา ตัวดำเนินการ Java Java Strings Java Math Java Booleans Java If...Else Java Switch Java ในขณะที่ลูป Java สำหรับลูป Java Break/ต่อ Java Arrays

เมธอดของจาวา

เมธอดของจาวา พารามิเตอร์เมธอด Java วิธี Java โอเวอร์โหลด ขอบเขต Java Java Recursion

คลาส Java

Java OOP Java Classes/Objects คุณสมบัติคลาส Java วิธีการคลาส Java Java Constructors Java Modifiers การห่อหุ้มด้วยจาวา แพ็คเกจ Java / API มรดกจาวา Java Polymorphism Java Inner Classes Java Abstraction อินเทอร์เฟซ Java Java Enums อินพุตผู้ใช้ Java Java วันที่ Java ArrayList Java LinkedList Java HashMap Java HashSet Java Iterator คลาส Java Wrapper ข้อยกเว้น Java Java RegEx Java Threads จาวา แลมบ์ดา

การจัดการไฟล์ Java

ไฟล์ Java Java สร้าง/เขียนไฟล์ Java อ่านไฟล์ Java ลบไฟล์

Java ฮาวทู

เพิ่มสองตัวเลข

Java Reference

คีย์เวิร์ด Java เมธอด Java String Java Math Methods

ตัวอย่าง Java

ตัวอย่าง Java Java Compiler แบบฝึกหัด Java Java Quiz ใบรับรอง Java


Java Inner Classes


Java Inner Classes

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

เมื่อต้องการเข้าถึงชั้นใน ให้สร้างวัตถุของชั้นนอก แล้วสร้างวัตถุของชั้นใน:

ตัวอย่าง

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

// Outputs 15 (5 + 10)


ชั้นในส่วนตัว

ไม่เหมือนกับคลาส "ปกติ" คลาสภายในสามารถเป็นprivateหรือprotected. หากคุณไม่ต้องการให้วัตถุภายนอกเข้าถึงคลาสภายใน ให้ประกาศคลาสเป็นprivate:

ตัวอย่าง

class OuterClass {
  int x = 10;

  private class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}

หากคุณพยายามเข้าถึงคลาสส่วนตัวภายในจากคลาสภายนอก จะเกิดข้อผิดพลาด:

Main.java:13: error: OuterClass.InnerClass has private access in OuterClass
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
              ^



ชั้นในคงที่

คลาสชั้นในสามารถเป็นได้staticซึ่งหมายความว่าคุณสามารถเข้าถึงได้โดยไม่ต้องสร้างวัตถุของคลาสภายนอก:

ตัวอย่าง

class OuterClass {
  int x = 10;

  static class InnerClass {
    int y = 5;
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass.InnerClass myInner = new OuterClass.InnerClass();
    System.out.println(myInner.y);
  }
}

// Outputs 5

หมายเหตุ:เช่นเดียวกับstaticแอตทริบิวต์และเมธอดstaticคลาสภายในไม่สามารถเข้าถึงสมาชิกของคลาสภายนอกได้


เข้าถึงชั้นนอกจากชั้นใน

ข้อดีอย่างหนึ่งของคลาสชั้นในคือพวกเขาสามารถเข้าถึงแอตทริบิวต์และเมธอดของคลาสภายนอกได้:

ตัวอย่าง

class OuterClass {
  int x = 10;

  class InnerClass {
    public int myInnerMethod() {
      return x;
    }
  }
}

public class Main {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.myInnerMethod());
  }
}

// Outputs 10