Bài giảng Lập trình hướng đối tượng - Bài 4B: Nested Class

8/24/2011  
1. Khái niệm  
Java cho phép định nghĩa 1 class trong class  
khácGọi là nested class  
Bộ môn Công nghệ Phần mềm  
Viện CNTT & TT  
Trường Đại học Bách Khoa Hà Nội  
Ví dụ:  
class OuterClass {  
...  
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG  
class NestedClass {  
...  
Bài 4B. Nested Class  
}
}
2
3. Phân loại  
2. Tại sao sử dụng nested class?  
Nested class chia làm 2 loại:  
Ví dụ:  
class OuterClass {  
...  
static class StaticNestedClass {  
...  
}
class InnerClass {  
...  
}
}
3
4
3.1. Static nested classes  
3.1. Static nested classes (2)  
public class Outside  
{
Được truy cập từ tên của class bao nó  
public static class Skinside  
{
public Skinside()  
{
Để tạo 1 đối tượng của static nested class:  
Chỉ được truy cập các thành viên static của  
class bao nó  
System.out.println("Demo static");  
}
}
public class Inside  
}
{
public static void main(String[] arg)  
{
Outside.Skinside example  
=
new Outside.Skinside();  
}
5
6
}
1
8/24/2011  
3.2. Inner Class  
3.2. Inner Class (2)  
Inner class có thể truy cập tới 1 member bất kỳ của  
1 thể hiện (instance) của inner class chỉ tồn  
tại được trong 1 thể hiện của outer class  
outer class  
Inner class không được có thành phần static  
public class Outer {  
private int id;  
private class Inner  
{
private static int defaultId; //Error  
public Inner()  
{
id = 00001; //Truy cập được id ngoài  
}
}
7
8
10  
12  
public class DataStructure  
private final static int SIZE  
private int[] arrayOfInts new int[SIZE];  
public DataStructure() {//fill the array with ascending integer values  
{
=
15;  
=
3.2. Inner Class (3)  
for (int  
arrayOfInts[i]  
i
=
0;  
i
<
SIZE; i++)  
i;  
{
=
}
}
public void printEven() {//In chỉ số lẻ trong mảng  
Inner Class lại chia làm 2 loại con:  
InnerEvenIterator iterator  
while (iterator.hasNext())  
=
{
this.new InnerEvenIterator();  
System.out.println(iterator.getNext()  
+ "  
");  
}
}
private class InnerEvenIterator  
//start stepping through the array from the beginning  
private int next 0;  
{ //inner class implements the Iterator pattern  
=
public boolean hasNext()  
return (next <= SIZE  
}
{
-
1); //check if current element is the last in the array  
public int getNext()  
{
int retValue arrayOfInts[next];  
=
next += 2; //get the next even element  
return retValue;  
}
}
}
public static void main(String s[])  
//fill the array with integer values and print out only values of even indices  
{
DataStructure ds  
ds.printEven();  
= new DataStructure();  
}
9
a. local inner class  
b. anonymous inner classes  
interface Counter  
{
class Outer  
{
int next();  
}
int outer_x  
=
100;  
void test()  
{
public class Outer{  
private int count  
for(int i=0; i<10; i++)  
class Inner  
void display()  
System.out.println("display: outer_x  
{
=
0;  
{
Counter getCounter(final String name)  
{
{
return new Counter()  
{
{
=
" + outer_x);  
System.out.println("Constructor Counter()");  
}
}
}
public int next()  
{
Inner inner  
= new Inner();  
System.out.print(name); // Access local final  
System.out.println(count);  
return count++;  
inner.display();  
}
}
};  
}
}
}
}
}
class InnerClassDemo  
{
public static void main(String[] args)  
{
public static void main(String args[])  
Outer outer new Outer();  
outer.test();  
{
Outer out  
Counter c1  
c1.next();  
c1.next();  
=
new Outer();  
out.getCounter("Local inner ");  
=
=
}
}
11  
2
pdf 2 trang baolam 17900 Free
Bạn đang xem tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 4B: Nested Class", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_bai_4b_nested_class.pdf