Class (Lớp)
Lớp là bản thiết kế (blueprint) từ đó các đối tượng riêng lẻ được tạo. Lớp có thể chứa bất kỳ loại biến nào sau đây:
Biến cục bộ (Local variables) - Biến được định nghĩa bên trong phương thức, constructor hoặc block gọi là biến cục bộ. Biến sẽ được khai báo và khởi tạo trong phương thức và bị hủy khi phương thức hoàn thành.
Biến thể hiện (Instance variables) - Biến thể hiện là biến trong lớp nhưng bên ngoài bất kỳ phương thức nào. Các biến này được khởi tạo khi lớp được khởi tạo. Biến thể hiện có thể truy cập từ bên trong bất kỳ phương thức, constructor hoặc block của lớp đó.
Biến lớp (Class variables) - Biến lớp là biến được khai báo trong lớp, bên ngoài bất kỳ phương thức nào, với từ khóa static.
Interface (Giao diện)
Interface là kiểu tham chiếu trong Java. Nó tương tự như class. Là tập hợp các phương thức trừu tượng (abstract methods). Lớp triển khai (implements) interface, từ đó kế thừa các phương thức trừu tượng của interface.
Ngoài các phương thức trừu tượng, interface cũng có thể chứa hằng số, phương thức default, phương thức static, và kiểu lồng nhau (nested types). Thân phương thức chỉ tồn tại cho default methods và static methods.
Viết interface tương tự viết class. Nhưng class mô tả thuộc tính và hành vi của đối tượng. Và interface chứa hành vi mà class triển khai.
Dưới đây là những khác biệt quan trọng giữa Class và Interface.
| Thứ tự | Khóa | Class | Interface |
|---|---|---|---|
| 1 | Phương thức hỗ trợ | Class có thể có cả phương thức abstract và concrete. | Interface chỉ có phương thức abstract. Từ Java 8, có thể có default và static methods. |
| 2 | Kế thừa đa dạng | Kế thừa đa dạng không được hỗ trợ. | Interface hỗ trợ kế thừa đa dạng. |
| 3 | Biến hỗ trợ | Hỗ trợ final, non-final, static và non-static. | Chỉ cho phép static và final. |
| 4 | Triển khai | Class có thể implements interface. | Interface không thể implements interface, chỉ có thể extends interface. |
| 5 | Từ khóa | Class khai báo bằng từ khóa class. | Interface khai báo bằng từ khóa interface. |
| 6 | Kế thừa | Class có thể extends class khác và implements interface. | Interface chỉ có thể extends interface khác. |
| 7 | Kế thừa (tiếp) | Class có thể được kế thừa bằng extends. | Interface chỉ có thể được implements. |
| 8 | Truy cập | Class có thể có thành viên private, public bất kỳ. | Interface chỉ có thể có thành viên public. |
| 9 | Constructor | Class có thể có constructor. | Interface không thể có constructor. |
Ví dụ Class vs Interface
JavaTester.java
public class JavaTester {
public static void main(String args[]) {
Animal tiger = new Tiger();
tiger.eat();
Tiger tiger1 = new Tiger();
tiger1.eat();
}
}
interface Animal {
public void eat();
}
class Tiger implements Animal {
public void eat() {
System.out.println("Tiger eats");
}
}
Kết quả
Tiger eats Tiger eats