Nội dung chính
Ràng buộc tĩnh và ràng buộc động
Có hai kiểu của ràng buộc:
- Ràng buộc tĩnh (còn gọi là ràng buộc trước).
- Ràng buộc động (còn gọi là ràng buộc sau).
Kiểu dữ liệu
1. Các biến có một kiểu
Mỗi biến có một kiểu dữ liệu, nó có thể là kiểu nguyên thủy hoặc kiểu không nguyên thủy.
int data=30;
Ví dụ trên, biến data có kiểu dữ liệu nguyên thủy là int.
2. Các tham chiếu có một kiểu
Ví dụ, d1 có kiểu là Dog.
class Dog{ public static void main(String args[]){ Dog d1; } }
3. Các đối tượng có một kiểu
Mỗi đối tượng là một thể hiện của một lớp cụ thể nào đó, nhưng nó cũng là thể hiện của lớp cha.
class Animal{} class Dog extends Animal{ public static void main(String args[]){ Dog d1=new Dog(); } }
Trong ví dụ trên d1 là thể hiện của lớp Dog, nhưng nó cũng là thể hiện của lớp Animal.
Ràng buộc tĩnh
Khi kiểu của đối tượng được xác định tại lúc biên dịch được gọi là ràng buộc tĩnh.
Nếu phương thức là private, final hoặc static thì đó là ràng buộc tĩnh.
Ví dụ về ràng buộc tĩnh:
class Dog{ private void eat() { System.out.println("dog is eating..."); } public static void main(String args[]){ Dog d1=new Dog(); d1.eat(); } }
Ràng buộc động
Khi kiểu của một đối tượng được xác định tại runtime được gọi là ràng buộc động.
Ví dụ về ràng buộc động:
class Animal{ void eat(){System.out.println("animal is eating...");} } class Dog extends Animal{ void eat(){System.out.println("dog is eating...");} public static void main(String args[]){ Animal a=new Dog(); a.eat(); } }
Output:
dog is eating...
Trong ví dụ trên kiểu của đối tượng không được xác định bởi trình biên dịch, bởi vì thể hiện của Dog cũng là thể hiện của Animal. Vì vậy trình biên dịch không biết kiểu của nó, chỉ biết kiểu base của nó.