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
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:
bai_giang_lap_trinh_huong_doi_tuong_bai_4b_nested_class.pdf

