Nested class trong Java – Hướng Dẫn Java

Java được cho phép tất cả chúng ta hoàn toàn có thể định nghĩa một class nằm trong một class khác, ví dụ như :

12345678

packagecom.huongdanjava.javaexample;

publicclassApplication{

classBuilder{

}

}

Class được định nghĩa bên trong một class khác, tất cả chúng ta gọi nó là nested class còn class khác này được gọi là outer class. Trong ví dụ của mình ở trên thì Builder là một nested class còn Application là một outer class. Nested class còn được chia thành 2 loại khác nhau là Non-static nested class và Static nested class. Cụ thể như thế nào ? Trong bài viết này, tất cả chúng ta sẽ khám phá về những nested class trong Java những bạn nhé !

Non-static nested class

Non-static nested class hay còn gọi là những Inner class. Chúng ta hoàn toàn có thể declare những Inner class này bên trong một class khác như class Builder ở trên, bên trong một phương pháp nào đó ( Method-local Inner Class ), ngoài những tất cả chúng ta còn có những class không có tên gọi là Anonymous Inner Class .

Khác với việc khai báo một class, chúng ta không thể declare nó với private access modifier, đối với Inner class chúng ta có thể làm điều này. Như ví dụ trên, mình có thể declare class Builder là private như sau:

12345678

packagecom.huongdanjava.javaexample;

publicclassApplication{

privateclassBuilder{

}

}

Mà khi đã declare một Inner class là private thì nó chỉ hoàn toàn có thể được access bên trong class nó được khai báo thôi những bạn nhé !
Để khởi tạo một Inner class, những bạn cần khởi tạo đối tượng người tiêu dùng cho outer class trước. Ví dụ như :

12345678910111213

packagecom.huongdanjava.javaexample;

publicclassApplication{

privateclassBuilder{

}

publicstaticvoidmain(String[]args){

Applicationapp=newApplication();

Builderbuilder=app.newBuilder();

}

}

Khi chúng ta khai báo một class bên trong một method nào đó, gọi là Method-local Inner Class, thì scope của class này chỉ thuộc về method đó mà thôi. Các bạn không thể khai báo class này với access modifier trong trường hợp này. Ví dụ như:

12345678910

packagecom.huongdanjava.javaexample;

publicclassApplication{

publicvoidprint(){

classBuilder{

}

}

}

Và do đó, tất cả chúng ta chỉ hoàn toàn có thể khởi tạo đối tượng người dùng của class này bên trong method :

123456789101112

packagecom.huongdanjava.javaexample;

publicclassApplication{

publicvoidprint(){

classBuilder{

}

Builderbuilder=newBuilder();

}

}

Các bạn hoàn toàn có thể khai báo final class hoặc abstract class bên trong một method những bạn nhé :

12345678910

packagecom.huongdanjava.javaexample;

publicclassApplication{

privatevoidprint(){

abstractclassBuilder{

        

}

}

}

Hay :

12345678910

packagecom.huongdanjava.javaexample;

publicclassApplication{

privatevoidprint(){

finalclassBuilder{

}

}

}

Anonymous Inner Class thường được khai báo khi chúng ta muốn override một phương thức nào đó của một class hoặc interface. Chúng ta sẽ khai báo Anonymous Inner Class và khởi tạo đối tượng cho class này cùng một thời điểm. Ví dụ như:

123456789101112

packagecom.huongdanjava.javaexample;

publicclassApplication{

publicvoidprint(){

Comparable

comparable=newComparable

(){

publicintcompareTo(Stringo){

return0;

}

};

}

}

Các bạn cũng hoàn toàn có thể declare Anonymous Inner Class bên ngoài method như sau :

1234567891011121314

packagecom.huongdanjava.javaexample;

publicclassApplication{

Comparable

comparable=newComparable

(){

publicintcompareTo(Stringo){

return0;

}

};

publicvoidprint(){

}

}

Static Nested Class

Static nested class là những class được định nghĩa với từ khoá static. Nó là static thành viên của outer class và do đó tất cả chúng ta không cần phải khởi tạo đối tượng người dùng của outer class và chính class này để access tới nó luôn. Ví dụ như :

123456789101112131415

packagecom.huongdanjava.javaexample;

publicclassApplication{

staticclassBuilder{

privatestaticvoidprint(){

}

}

publicstaticvoidmain(String[]args){

Application.Builder.print();

}

}

Static nested class sẽ không access được tới những field, methods non-static của outer class. Ví dụ như :

Nested class trong Java

Chúng ta không hề declare Static nested class bên trong method những bạn nhé !