โปรแกรม Java เดียวสามารถมีสองคลาสหรือมากกว่าได้ เป็นไปได้ 2 วิธีใน Java
สองวิธีการ Implement Multiple Classes ในโปรแกรม Java เดียว
- Nested Classes
- Multiple non-nested classes
คอมไพเลอร์ทำงานอย่างไรกับ Multiple non-nested classes
ในตัวอย่างด้านล่าง โปรแกรม java มีสองคลาส คลาสหนึ่งชื่อ Computer อีกคลาสชื่อ Laptop ทั้งสองมี constructor และเมธอดของตัวเอง ใน main method เราสามารถสร้าง object ของสองคลาสและเรียกเมธอดได้
ตัวอย่าง
public class Computer {
Computer() {
System.out.println("Constructor of Computer class.");
}
void computer_method() {
System.out.println("Power gone! Shut down your PC soon...");
}
public static void main(String[] args) {
Computer c = new Computer();
Laptop l = new Laptop();
c.computer_method();
l.laptop_method();
}
}
class Laptop {
Laptop() {
System.out.println("Constructor of Laptop class.");
}
void laptop_method() {
System.out.println("99% Battery available.");
}
}
เมื่อคอมไพล์โปรแกรมข้างต้น สอง .class files จะถูกสร้าง คือ Computer.class และ Laptop.class นี้มีข้อได้เปรียบว่าเราสามารถ reuse .class file ไปในโปรเจกต์อื่นโดยไม่ต้อง compile ใหม่ สรุปคือ จำนวน .class files ที่สร้างจะเท่ากับจำนวนคลาสในโค้ด เราสามารถสร้างคลาสได้มากเท่าที่ต้องการ แตการเขียนหลายคลาสในไฟล์เดียวไม่แนะนำ เพราะทำให้โค้ดอ่านยาก มากกว่าควรสร้างไฟล์แยกสำหรับแต่ละคลาส
ผลลัพธ์
Constructor of Computer class. Constructor of Laptop class. Power gone! Shut down your PC soon... 99% Battery available.
คอมไพเลอร์ทำงานอย่างไรกับ Nested classes
เมื่อ main class ถูกคอมไพล์ซึ่งมี inner classes หลายตัว คอมไพเลอร์จะสร้าง .class files แยกสำหรับแต่ละ inner class
ตัวอย่าง
// Main class
public class Main {
class Test1 { // Inner class Test1
}
class Test2 { // Inner class Test2
}
public static void main(String [] args) {
new Object() { // Anonymous inner class 1
};
new Object() { // Anonymous inner class 2
};
System.out.println("Welcome to Tutorials Point");
}
}
ในโปรแกรมข้างต้น เรามี Main class ที่มี inner classes 4 ตัวคือ Test1, Test2, Anonymous inner class 1 และ Anonymous inner class 2 เมื่อคอมไพล์คลาสนี้ จะสร้าง class files ดังนี้:
- Main.class
- Main$Test1.class
- Main$Test2.class
- Main$1.class
- Main$2.class
ผลลัพธ์
Welcome to Tutorials Point