Hướng Đối Tượng Trong Java (tt)

Thứ Sáu, 20 tháng 4, 2012


Khai báo một thuộc tính:
Khai báo 1 thuộc tính
public static void temp;
Từ thứ 1 là khai báo quyền truy xuất,có 3 loại
-public:được phép truy xuất từ bất cứ nơi nào
-protected:chỉ có lớp con mới được phép truy xuất
-private:chỉ có lớp đó xài(thuộc tính riêng của nó)
-nếu không khai báo,mặc định là protected
b.Từ thứ 2 là khai báo cách truy xuất(static)
static(tĩnh)
-nếu không khai báo,mặc định là không tĩnh
Tất cả các đối tượng thể hiện từ lớp cha đều được phép thay đổi giá trị của các thuộc tính không tĩnh,còn giá trị của thuộc tính tĩnh thì không được phép thay đổi


public class Car
{
               
public string branch;
               
public int cost;
               
public static int tire=4;
}


Như ví dụ trên,tất cả các lớp con của lớp Car (như ToyotaCar,Peugeot,Mazda…) đều được phép thay đổi các thuộc tính branch hay cost để phù hợp cho riêng mình,nhưng thuộc tính tire (số bánh xe) không được phép thay đổi vì là thuộc tính tĩnh
Nói cách khác, chỉ có một và chỉ một thuộc tính có tên là tire trong class Car và tất cả các class con của nó, vì vậy gọi là tĩnh

Khai báo một hành vi
Một phương thức được khai báo như sau
public static double ketqua()
Có 3 chỉ định truy xuất là public, protected và private
-public:được phép truy xuất từ bất cứ nơi nào
-protected:chỉ có lớp kế thừa lớp chứa nó được truy xuất
-private:chỉ lớp chứa nó được truy xuất(dùng nội bộ)
-nếu không khai báo,mặc định là protected
Có 6 chỉ định thuộc tính là static, abstract, final, native, synchronized (đồng bộ) và volatile (linh hoạt)
static(tĩnh)
-nếu không khai báo,mặc định là không tĩnh


class TestObject
{
               
static void StaticMethod() {…}
               
void NonStaticMethod() {…}
}


Nếu là một phương thức không tĩnh, đầu tiên bạn phải khởi tạo một đối tượng,sau đó mới được phép gọi phương thức
TestObject test=new TestObject();
test.NonStaticMethod();
Nếu là một phương thức tĩnh,bạn được phép gọi trực tiếp từ lớp
TestObject.StaticMethod();
abstract(trừu tượng)
Một phương thức trừu tượng không có nội dung.Nội dung của nó sẽ được các lớp con tùy biến và phát triển theo hướng của riêng nó.
- final: không thể được extends hay override (ghi đè)
- native: thân phương thức viết bằng C hay C++
- synchronized: chỉ cho phép 1 thread truy cập vào khối mã ở cùng một thời điểm
- volatile: sử dụng với biến để thông báo rằng giá trị của biến có thể được thay đổi vài lần vì vậy không ghi vào thanh ghi
.Từ thứ 3 là giá trị trả về.Nếu không có giá trị trả về thì là void 



interface-template
Bây giờ ta có 1 khái niệm mới, là giao diện. Giao diện ra đời chính là để giải quyết đa kế thừa. Mỗi lớp trong Java chỉ có 1 lớp cha, nhưng có thể implements nhiều giao diện.
Giao diện được khai báo giống như 1 lớp, cũng có state và behavior. Nhưng state của giao diện là final còn behavior là abstract
Giả sử, ta sẽ khai báo một giao diện


public interface Product
{
               
//hai state duoi day la final, tuc la lop implements khong duoc phep doi gia tri
               
static string maker = My Corp”;
               
static string phone = 555-7767”;
               
//behavior duoi day la abstract, tuc la khong co noi dung
               
public int getPrice(int id);
}


Bây giờ, ta sẽ viết một class có cài đặt (implements) giao diện này

public class Shoe implements Product
{
               
public int getPrince(int id)
               
{
                               
return (id= =1)?5:10;
               
}
               
public String getMaker()
               
{
                               
return maker;
               
}
}

Muốn implements nhiều giao diện, làm như sau, ví dụ class Toyota extends Car implements ActionCar, ActionMobilation

package-unit
Hãy tạo 1 thư mục có tên là Transport
Bên trong thư mục này hãy tạo 2 file là Car.java và Bicycle.java như sau
--Car.java-


package Transport;
public class Car
{
               
public String manufacturer;
               
public int year;
}


--Bicycle.java-

package Transport;
public class Bicycle
{
               
public int cost;
               
public Bicycle(int cost)
               
{
                               
this.cost = cost;
               
}
}

Như vậy là ta đã tạo ra 1 gói chứa 2 lớp là Car và Bicycle. Bây giờ ta có 1 chương trình muốn sử dụng gói này là TestProgram.java. Ta viết:--ViDuTransport.java-
import Transport.*;
class TestProgram
{
               
public static void main(String args[])
               
{
                               
Car myCar = new Car();
                                myCar
.manufacturer = Toyota”;
                               
Bicycle myBicycle = new Bicycle(1500);
               
}
}


Lưu ý nếu trong file ViDuTransport bạn không khai báo import Transport.* thì bạn vẫn có thể khai báo tường minh như sau
Transport.Car myCar = new Transport.Car(); 



nạp chồng (overload) 1 phương thức
class Vidu
{
               
public satic void main(String a[])
               
{
                               
private  float cost;
                               
public float CalculateSalePrice()
                               
{
                                               
return cost*1.5;
                               
}
                               
public float CalculateSalePrice(double heso)
                               
{
                                               
return cost*(1+heso);
                               
}
               
}
}

Ở đây có 2 phương thức trùng tên CalculateSalePrice nhưng phương thức thứ 2 khác tham số, gọi là nạp chồng
* nạp chồng (overload) và ghi đè (override)
Những phương thức được nạp chồng là những phương thức trong cùng một lớp, có cùng một tên nhưng danh sách đối số khác nhau
Phương thức được ghi đè là phương thức có mặt ở lớp cha, được xác định là phương thức chung cho các lớp con, rồi xuất hiện ở các lớp con
Nạp chồng là một hình thức đa hình (polymorphism) trong quá trình biên dịch (compile) còn ghi đè là trong quá trình thực thi (runtime) 
Xem thêm bài viết cùng chuyên mục: ,

Ý kiến bạn đọc [ 0 ]


Ý kiến của bạn