Khai báo class trong Java, Nguyên tắc khai báo class

Khai báo class trong Java, Nguyên tắc khai báo class.

Khi bạn viết code trong Java, bạn viết các class hoặc các interface. Bên trong các class là các biến(variable) và phương thức (method). Việc bạn khai báo các class, biến, method ảnh hưởng nhiều tới code của bạn. Ví dụ một public method có thể truy cập từ bất kỳ đâu trong ứng dụng trong khi một method được đánh dấu là private thì chỉ có thể truy cập ở bên trong class đó.

Khai báo class trong Java, Nguyên tắc khai báo class stackjava.com

1. Nguyên tắc khai báo source file (file .java)

Các nguyên tắc khai báo class, sử dụng import và package trong source file (file .java):

  • Mỗi file .java chỉ có nhiều nhất một public class (không tính class con)
  • Các bình luận (comment) có thể xuất hiện ở đầu file, cuối file hoặc bất kỳ dòng nào.
  • Nếu có một public class trong file thì tên của class đó phải trùng với tên của file. Ví dụ public class Student{} thì tên file sẽ là Student.java
  • Nếu class là một phần của một package thì phải khai báo package ở dòng đầu tiên trong file.
  • Nếu sử dụng import thì chúng phải nằm giữa khai báo package (nếu có) và khai báo class.
  • Khai báo import và package được áp dụng cho tất cả các class bên trong file. Không có cách nào để thực hiện khai báo nhiều class trong một file mà sử dụng package/import khác nhau.
  • Nếu file không có public class nào thì chúng có thể đặt tên không trùng với bất kỳ class nào.

Ví dụ 1:

Khai báo class trong Java, Ví dụ khai báo class

Mình khai báo public class Student,

  • Đây là public class nên tên của class phải trùng với tên file (Student.java)
  • Class Student nằm trong package stackjava.com.demo.package1 nên sẽ phải khai báo package stackjava.com.demo.package1; ở dòng đầu tiên
  • Class Address được khai báo như một biến bên trong class Student nhưng nó nằm ở package khác nên phải import package chứa class Address: import stackjava.com.demo.package2.Address;

Ví dụ 2:

Khai báo class trong Java, Nguyên tắc khai báo class

  • Trong file Demo.java không có public class nào, tên class bên trong không cần trùng tên file
  • Các comment có thể xuất hiện ở bất kỳ dòng nào.
Khai báo class trong Java, Nguyên tắc khai báo class stackjava.com

2. Khai báo class và modifier

Modifier là các từ dùng trước các khai báo class, biến, method để thể hiện tính chất của class/biến/method đó. Tính chất mà modifier thể hiện có thể là khả năng truy cập (access modifiers) hoặc không phải về khả năng truy cập (non-access modifier):

  • Access modifiers: public, protected, priavte, default (không khai báo gì)
  • Non-access modifiers: strictfp, final, abstract.

2.1. Class Access

Khi nói một class (class A) có  truy cập tới (access) class khác (class B) nghĩa là A có thể làm một trong 3 điều sau:

  • Tạo một thể hiện của class B
  • Extend (thừa kế) class B
  • Truy cập vào các method, biến bên trong class B (phụ thuộc vào access modifier của các method, biến)

2.2. Default Accesss

Một class với default access (không sử dụng các từ khóa public) sẽ chỉ được nhìn thấy và truy cập bởi các class khác trong cùng 1 package.

Ví dụ class A và class B ở 2 package khác nhau trong đó A là default access thì bên trong class B sẽ không thể tạo được thể hiện của class A.

package stackjava.com.demo.package2;

class Address {

}

Class sau đây khi compile sẽ bị lỗi:

package stackjava.com.demo.package1;
import stackjava.com.demo.package2.Address;

class Student {
  private Address address;
}

Khai báo class trong Java, Nguyên tắc khai báo class

2.3. Public Access

Một class được khai báo với từ khóa public sẽ cho phép tất cả các class từ tất cả các package truy cập.

(Nếu truy cập public class ở 1 class thuộc package khác bạn vẫn phải khai báo import package cho class đó)

2.4. Strictfp modifier

2.5 Final class

Sử dụng từ khóa final class khi khai báo class nghĩa là class đó không thể được thừa kế bởi class khác.

Việc sử dụng từ khóa final như thế để đảm bảo chắc chắn rằng các method của class đó không bị ghi đè.

Nhiều class trong thư viện Java core cũng là final class, ví dụ class String trong java: public final class String trong package java.lang;

Ví dụ:

package stackjava.com.demo.package1;

public final class Person {

}

Person là một final class nên không thể bị thừa kế:

package stackjava.com.demo.package1;

public class Student extends Person{

}

Khai báo class trong Java, Nguyên tắc khai báo class

2.6 Abstract class

Một abstract class (class được khai báo với từ khóa abstract) sẽ không thể tạo được thể hiện.

Mục đích của abstract class là để cho các class khác thừa kế. Người ta thường gom các thuộc tính chung của các class lại thành 1 abstract class và để cho chúng thừa kế abstract class này.

Ví dụ: Student và Lecture đều có các thuộc tính: name, dateOfBirth, sex. Bây giờ ta tạo một abstract class là Person chứa các thuộc tính đấy để cho Student và Lecture thừa kế:

package stackjava.com.demo.package1;

import java.util.Date;

public abstract class Person {
  protected String name;
  protected Date dateOfBirth;
  protected String sex;
}
package stackjava.com.demo.package1;

public class Student extends Person{

}
package stackjava.com.demo.package1;

public class Lecturer extends Person{

}

Bây giờ ta có thể tạo các thể hiện của Student nhưng không thể tạo thể hiện của Person.

Student student = new Student();
Person person = new Person();

 

Khai báo class trong Java, Nguyên tắc khai báo class stackjava.com

Xem thêm: https://stackjava.com/java-core

References:

stackjava.com