từ khóa trong java
Friday, September 2, 2011 5:01:13 PM
abstract- Nếu 1 phương thức được khai báo abstract: phương thức này không có cài đặt, việc cài đặt được thực hiện bởi lớp con của lớp chứa phương thức abstract.
- Khi 1 phương thức là trừu tượng thì bản thân lớp chứa nó cũng là trừu tượng
Lợi ích của lớp trừu tượng:: để khai báo những tính năng chung mà chúng ta cần sử dụng cho tất cả lớp con
- Không thể tạo instance (new đối tượng)cho 1 abstract class...mục đích duy nhất của abstract class là để các lớp khác thừa kế nó
ví dụ: P/S: theo mình hiểu: trừu tượng tức là chưa được rõ ràng...nên cần hiểu chi tiết hơn bằng cách tách nó ra nhỏ hơn-->các lớp con... Ví dụ ta có 1 class Animal có 2 phương thức eat() và sleep().. eat như thế nào..sleep như thế nào thì chưa rõ được (vì chưa biết là con animal gì)nên khai báo là abstract...Đến khi có class con của class Animal này: class Cat và class Dog..thì lúc đó class con Cat sẽ định nghĩa chi tiết phương thức con mèo eat như thế nào..tương tự cho class Dog..2 class Dog và Cat đều có chung các hành vi là ngủ (sleep) và ăn (eat) nhưng cách ngủ và ăn của 2 con này khác nhau nên định nghĩa hàm eat và sleep của 2 class này sẽ khác nhau..
việc định nghĩa hàm eat và sleep từ 2 class con Cat và Dog cho class cha Animal gọi là overriding (ghi đè)..cái này làm mình liên tưởng tới khái niệm chuyên biệt hóa..từ cái root mơ hồ chung chung..tách ra thành cây con chi tiết.
Sẵn tiện nói đến overloading (nạp chồng ) luôn nhé. Theo mình hiểu overloading tức nhiều hàm cùng tên nhưng khác tham số truyền vào (số lượng tham số, kiểu dữ liệu). Lợi ích của nạp chống: thể hiện tính đa hình..1 hàm có nhiều cách định nghĩa..nôm na là hành xử khác nhau tùy tình uống
Ví dụ: cũng theo mình hiểu thôi
..trong 1 class game_danh_nhau có hàm tan_cong() nhưng tấn công thế nào còn tùy tình huống, nếu địch thủ đánh tay không ta gọi hàm tan_cong() nêu địch thủ đánh kiếm ta cũng gọi hàm tấn công nhưng cách tấn công khác đi..ta cũng phải cầm kiếm..gọi tan_cong(kiem)
Phân biệt:: ovveride nhấn mạnh class cha...lớp con ghi đè lớp cha (cùng tên hàm, cùng tham số, cùng kiểu dữ liệu) ...trường hợp có thể lớp cha đã định nghĩa rồi (không phải hàm astract) nhưng class con ...tân tiến hơn..thêm thùa vào..ghi đè lớp cha..-->tính mở rộng còn trường hợp 2 là lớp cha chưa định nghĩa..(hàm abstract)..như ví dụ class Animal phía trên.(bên C# ko có ghi đè thỏai mái vậy..buộc phương thức được ghi đè phải là virtual)
overload: ko dính liếu gì đến lớp cha...tình huống nào thì gọi hàm ứng với tham số, kiểu dữ liệu phù hợp
-----------------------------------------------------------------------------------------------
Interface: là 1 class chỉ gồm thuộc tính và các hàm abstract được khai báo trước- Một lớp thi hành các hàm trong interface thông qua từ khoá implements.
- Một lớp có thể implements nhiều interface.
- Dù không khai báo từ khoá abstract, nhưng mọi hàm trong 1 interface đều được coi là abstract (trừu tượng)
- Các biến trong Interface thì phải là public, static hay final.
- Không được khai báo private hay protected đối với các biến và các hàm trong Interface vì các hàm này sẽ được viết lại (overriden) trong lớp thực thi nó.
Mục đích: theo mình là do tính đa thừa kế...1 class con ko thể có nhiều class cha nhưng có thể implements nhiều interface..các bạn làm nhiều với UI thì sẽ thấy..1 class con kế thừa class TextBox nó sẽ có tất cả thuộc tính chức năng của TextBox nhưng nó lại có mối liên hệ với 1 class khác..class nhận sự kiện xảy ra trên giao diện chẳng hạn..khi bạn đánh text vào TextBox rồi nhấn enter..thao tác nhấn enter đó sẽ do 1 class Listener nào đó chịu trách nhiệm..để làm được như vậy bạn sẽ cần 1 class con của class TextBox implements interface Listener (giả sử vậy)
---------------------------------------------------------------------------------------------
finalSử dụng từ khoá final cấm sự kế thừa và ghi đè (tức không có tính kế thừa với class khai báo final)..với 1 class final tất cả fương thức của nó đều là final. Mục đích: muốn 1 class cố định không muốn có sự mở rộng..bảo trì sửa chữa vào class
khai báo biến final: nó là 1 hằng
----------------------------------------------------------------------------------------------
staticNhư bạn đã biết mỗi khi muốn thao tác với một đối tượng ta phải instance nó từ một class mô tả nó. Khi creat một đối tượng từ một lớp thì sẽ phải mất vùng nhớ dành đối tượng đó. Một đối tượng có thể có rất nhiều fiels, method. Có khi nào bạn nghĩ rằng tại sao phải khởi tạo rất nhiều thứ khi mà thực tế tả chỉ dùng một phần của nó (trích lời 1 member trong JavaVietNam.org). Với từ khóa static
ta dùng ngay tên class.thuôc tính hoặc tên hàm mà không cần tạo instance.
Với biến khai báo static có tác dụng là biến toàn cục cho tất cả các đối tượng của lớp đó, còn biến bình thường là biến cục bộ của từng đối tượng. Một đối tượng nào đó thay đổi giá trị của biến static thì thay đổi đó cũng ảnh hưởng tới những đối tượng khác.
Với hàm khai báo static: chỉ có quyền truy cập đến những biến thành viên static và chỉ có thể gọi những hàm thành viên static
Class khai báo static: Static class thì chỉ chứa các hàm và các biến static
Lớp static khác với lớp bình thường là mỗi khi bạn chạy chương trình là lớp static đươc cấp luôn bộ nhớ Ram và tồn tại từ suốt lúc chạy chương trình. Còn lớp bình thường là khi nào bạn sử dụng thì chương trình mới cấp phát bộ nhớ trên Ram
Bạn đã biết là trong một lớp bao gồm các thuộc tính và phương thức. Ngoài ra trong lớp cũng có thể chứa một lớp khác -->gọi là lớp lồng nhau. Tất cả các thành phần có thể có của một lớp gọi là các thành viên lớp (class members).
Điểm khác nhau giữa static class và non-static class là khi tạo ra đối tượng mới, với static bạn không cần phải có sẵn đối tượng của lớp bao ngoài (outer class). Tính chất này cũng giống như bạn đã biết với thuộc tính và phương thức static vậy.
Ví dụ:
class A {
class B {}
}
thì khi muốn có object B, bạn phải viết:
A a = new A();
B b = a.new B();
Nếu B là static, bạn chỉ cần viết
B b = new A.B();
Về từ khóa static..tham khảo link này http://www.diendantinhoc.org/vcs/forum/topic/7957/FAQ-Static-Class-Members.html%3bjsessionid=270D463DF9796CDC25D1BF491E2E0058?zone=4
--> chi tiết vô cùng






