V. Xõy dựng Class trong Java
V.8 Lớp lồng nhau – lớp nội
Cú thể định nghĩa một lớp bờn trong một lớp khỏc . Lớp như võ ̣y go ̣i là lớp lụ̀ng (Nested Class) và được cài đặt như sau :
class EnclosingClass{ // Lớ p bao bờn ngoài . . .
static class StaticNestedClass { // Lớ p lụ̀ng tĩnh . . .
}
class InnerClass { // Lớ p lụ̀ng phi tĩnh hay lớp nụ ̣i bụ ̣ . . .
} }
Lớp lụ̀ng chỉ được biờ́t bờn trong phạm vi của lớp bao bờn ngoài . Trỡnh biờn dịch Java sẽ bỏo lỗi nếu mụ ̣t đoa ̣n mã bṍt kỳ của lớp bờn ngoài truy cập trực tiờ́p lớp lụ̀ng.
Mụ ̣t lớp lụ̀ng c ú quyờ̀n truy cõ ̣p đờ́n các thành viờn của lớp bao bờn ngoài , thõ ̣m chí nờ́u chỳng được khai bỏo private . Tuy nhiờn , lớp bao khụng thờ̉ truy xuṍt các thành phần của lớp lụ̀ng.
Cú hai kiểu lớp lồng : tĩnh và phi tĩnh .
Lớp lụ̀ng tĩnh (static nested class) được bụ̉ sung từ khoá static . Nú khụng thể tham chiếu trực tiờ́p đờ́n biờ́n hay phương thức đụ́i tượng được đi ̣nh nghĩa trong lớp bao, mà chỉ dựng chỳng thụng qua đụ́i tượng. Vỡ giới hạn này nờn lớp lồng tĩnh ớt được dựng . Hầu hết cỏc lớp lồng là lớp nụ ̣i bụ ̣.
Lớp lụ̀ng phi tĩnh (nonstatic nested class ) khụng bụ̉ sung từ khoá static , cũn được go ̣i là lớp nụ ̣i bụ ̣ (inner class). Nú cú thể truy cập trực tiếp đến cỏc biến và phương thức đối tượng.
class Outer {
int outer_x = 100; void test() {
Inner inner = new Inner(); inner.display_x();
}
class Inner { // cú thể truy xuṍt trực tiờ́p biờ́n đụ́i tượng của lớp Outer int inner_y = 10;
void display_x() {
} }
void display_y() { // khụng thể truy xuất biến đối tượng của lớp Inner System.out.println(“display : inner_y = “ + inner_y); // Error }
}
class InnerClassDemo {
public static void main(String args[]) { Outer outer = new Outer(); outer.test();
} }
Trong Java cú sử dụng một kỹ thuật cài đặt lớp nội nặc danh, tức là khụng cú tờn, khi xử lý cỏc sự kiện. Vớ dụ:
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent event) {
System.exit(0); }
public void windowIconified(WindowEvent e) {System.exit(0);} } );
Ở đõy, ta cú một lớp nặc danh kế thừa từ lớp WindowAdapter. Nú được khai bỏo chồng 2 phương thức của WindowAdapter.