25/05/2018, 09:22

Một số vấn đề liên quan đến lớp trong Java

Định nghĩa lớp mới Ngoài các lớp được định nghĩa sẵn trong thư viện chuẩn của java, các lập trình viên có thể định nghĩa thêm các lớp của mình theo cú pháp sau: class ClassName { // Danh sách các thuộc tính ...

Định nghĩa lớp mới

Ngoài các lớp được định nghĩa sẵn trong thư viện chuẩn của java, các lập trình viên có thể định nghĩa thêm các lớp của mình theo cú pháp sau:

class ClassName {    // Danh sách các thuộc tính thuộc lớp        DataType01 attribute1, attribute2, . .;        DataType02 attribute3, attribute4, . .;    // Danh sách các phương thức thuộc lớp        ClassName([DataType parameter, DataType parameter]) {             //     Constructor            ...        }        void method01() {            . . .        }        DataType method02( . . .) {             ...            return xx;        } }

ClassName là tên lớp mới đang được định nghĩa.

Tạo đối tượng tên obj thuộc lớp ClassName.

ClassName  obj = new ClassName();

Ví dụ: Định nghĩa một lớp có:

  • Tên là Person
  • Hai thuộc tính là name và address
  • Phương thức khởi tạo có hai tham số để gán giá trị khởi động cho hai thuộc tính.
  • Phương thức void display() cho biết người đó tên là gì, địa chỉ ở đâu.
  • Phương thức main() tạo ra một đối tượng tên là tom thuộc lớp Person    

Lưu chương trình sau vào tập tin Person.java

public class Person{    String name;         //Thuộc tính    String address;     //Thuộc tính    Person(String n, String address) {     // Phương thức khởi tạo        name = n;        this.address = address;    }    void display(){                                   // Hiển thị tên và địa chỉ        System.out.print(name + " is at "+ address);    }    public static void main(String args[]){        Person tom = new Person("Tom","Disney Land"); // Tạo đối tượng        tom.display(); // Gọi phương thức của đối tượng    } }

Biên dịch và thực thi ta được kết quả:

Kết quả biên dịch chương trình Person.java

Phạm vi nhìn thấy của một lớp

Một lớp được định nghĩa và cài đặt bên trong một tập tin. Một tập tin có thể chứa một hoặc nhiều lớp. Trong một tập tin, chỉ có một lớp được khai báo là public (phía trước từ khóa class), các lớp còn lại phải là private (mặc nhiên). Một lớp được khai báo là public sẽ được nhìn thấy bởi các lớp khác ở cùng tập tin hay khác tập tin với nó. Ngược lại các lớp private chỉ được nhìn thấy bởi các lớp nằm cùng  tập tin với nó mà thôi.

Ví dụ: Trong ví dụ này, chúng ta tách phương thức main ra khỏi lớp Person  và đưa nó vào lớp mới MultiClass. Lưu hai lớp này vào trong cùng một tập tin tên là MultiClass.java, với lớp MultiClass được khai báo là public, lớp Person khai báo private.

// Lớp có phạm vi public có thể tham khảo từ bên ngoài tập tinpublic class MultiClass {    public static void main(String args[]){        Person tom = new Person("Tom","Disney Land");        tom.display();        } }// Lớp có phạm vi private chỉ có thể tham khảo bởi các lớp nằm cùng tập tinclass Person{    String name;    String address;    Person(String n, String address) {        name = n;        this.address = address;    }    void display(){        System.out.println(name + " is at "+ address);    }}

Biên dịch và thực thi ta được kết quả:

Kết quả biên dịch chương trình MultiClass.Java 

Tính thừa kế

  • Một lớp chỉ có thể có một lớp cha (thừa kế đơn).
  • Lớp cha được tham khảo từ lớp con bởi từ khóa super.
  • Dùng từ khóa extends để khai báo thừa kế.

Cú pháp: 

class A extends B { // Khai báo A thừa kế từ B    ... }

Ví dụ: Định nghĩa lớp Client có các đặc điểm sau:

  • Thừa kế từ lớp Person.
  • Có thêm thuộc tính: telephone và buy (lượng hàng mua).
  • Có phương thức khởi tạo.
  • Định nghĩa lại phương thức void display() của lớp cha.

Lưu chương trình sau vào tập tin Client.java

public class Client extends Person{    int telephone;    long buy;    public Client(String n, String a, int t, long b) {        super(n,a);         telephone=t;        buy=b;     }    public void display() {        super.display();         System.out.println( ", Number of telephone:"+ telephone + ", buy: "+ buy );     }    public static void main(String args[]){        Client tom = new Client("Tom","Disney Land",123456,1000);        tom.display();    } }

Biên dịch và thực thi ta được kết quả:

Kết quả biên dịch chương trình Client.Java
0