Java - Chương 8: Lớp và đối tượng

Đối tượng và lớp. Thuộc tính và phương thức của lớp Hàm tạo Từ bổ nghĩa (public, private, protected). Từ khóa this. Tính đóng gói Tính đa hình Tính kế thừa Lớp trừu tượng

pptx60 trang | Chia sẻ: thuychi16 | Lượt xem: 767 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Java - Chương 8: Lớp và đối tượng, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 8Lớp và Đối tượngChương 8: Lớp và Đối tượngĐối tượng và lớp.Thuộc tính và phương thức của lớpHàm tạoTừ bổ nghĩa (public, private, protected).Từ khóa this.Tính đóng góiTính đa hìnhTính kế thừaLớp trừu tượngĐối tượng và lớpMột đối tượng biểu diễn một thực thể cụ thể, riêng biệt trong thế giới thực Lớp là mô tả trừu tượng cho một đối tượng cụ thể.Đối tượng được xây dựng từ lớp nên được gọi là thể hiện của lớp (class instance).Lớp chứa:Tên classCác thuộc tính (properties) mô tả các trạng thái (state) của đối tượng. Các phương thức khởi tạo (constructor)Các phương thức (methods) mô tả các hành vi (behavior) của đối tượngĐối tượng và lớpKhai báo lớp (class) class { //khai báo các thuộc tính của lớp ; ; //các hàm tạo constructor1 constructor2 //các phương thức () () } Khai báo lớp (class)class: là từ khóa của javaClassName: là tên đặt cho lớpfield_1, field_2: các thuộc tính (các biến, hay các thành phần dữ liệu của lớp)constructor: là phương thức xây dựng, khởi tạo đối tượng của lớp.method_1, method_2: là các phương thức thể hiện các thao tác xử lý, tác động lên các thuộc tính của lớp.Ví dụ khai báo lớpclass ConNguoi{}String ten;int tuoi;double hsl;ConNguoi(){}ConNguoi(String t1, int t2){ ten = t1; tuoi = t2;}public void tangLuong(double d1){ hsl = d1;}Thuộc tínhHàm khởi tạoPhương thứcThuộc tính của lớpVùng dữ liệu (fields) hay thuộc tính (properties) của lớp được khai báo bên trong lớp như sau: class { // khai báo các thuộc tính của lớp ; // }Thuộc tính của lớp: Để xác định quyền truy xuất của các đối tượng khác đối với thuộc tính của một lớp người ta thường dùng các tiền tố sau:Mặc địnhpublicprivateprotected : Các kiểu cơ sở như int, float,..: Tên thuộc tính (tên biến).Từ bổ nghĩa chỉ phạm vi truy xuấtTừ bổ nghĩa chỉ phạm vi truy xuấtVí dụ thuộc tính của lớpThuộc tính của lớp(XeMay và Xe2Banh cùng chung 1 gói XeDongCo)- Thuộc tính private không được phép truy cập từ bên ngoài lớp.- Mặc định, public, protected  OKThuộc tính của lớp(Xe2Banh và XeBo không cùng 1 gói)- Thuộc tính mặc định, private, protected không được phép truy cập từ gói bên ngoài.- public  OK (được quyền truy cập trong bất kỳ gói nào)Thuộc tính của lớp(HonDa và Xe2Banh trong cùng gói)- Thuộc tính private của lớp cha không được phép truy cập từ lớp con kế thừa.- Mặc định, public, protected  OKThuộc tính của lớp(XeDap và Xe2Banh không cùng chung gói)- Thuộc tính mặc định, private của lớp cha không được phép truy cập từ lớp con kế thừa nằm bên ngoài gói.- public, protected  OKPhương thức setter và getterNguyên tắc chung: Dùng private cho thuộc tính và public cho phương thức.  truy cập các thuộc tính khi nó là private?Phương thức setter và getterPhương thức setter: gán giá trị cho các thuộc tính của đối tượng.Phương thức setter: trả về các thuộc tính của đối tượng.Click phải chuột -> chọn Source ->chọn  Geneate Getters and Setters -> chọn các thuộc tính.Ví dụ:Lớp sinh viên có 2 thuộc tính + Họ tên + TuổiYêu cầu: xây dựng phương thức setter và getter cho các thuộc tính trên. Phương thức setter và getterHàm hay phương thức (method) trong Java là khối lệnh thực hiện các chức năng, các hành vi xử lý của lớp lên vùng dữ liệu.Phương thức của lớp Khai báo phương thức: () { ; } public class XeMay{ public String nhasx; public float tinhGiaBan() { return 1.5 * chiphisx; } }: Để xác định quyền truy xuất của các đối tượng khác đối với các phương thức của lớp người ta thường dùng các tiền tố sau: public, protected, private, static, final, abstract, synchronized: Có thể là kiểu void, kiểu cơ sở hay một lớp.: đặt theo qui ước giống tên biến.: có thể rỗngPhương thức của lớppublic, protected, private.static: Phương thức lớp dùng chung cho tất cả các thể hiện của lớp.Có thể được thực hiện kể cả khi không có đối tượng của lớp chứa phương thức đó.final: phương thức có tiền tố này không được khai báo chồng ớ các lớp dẫn xuất.abstract: Phương thức không cần cài đặt (không có source code).Sẽ được hiện thực (cài đặt) trong các lớp dẫn xuất từ lớp này.synchoronized: dùng để ngăn các tác động của các đối tượng khác lên đối tượng đang xét trong khi đang đồng bộ hóa. Dùng trong lập trình multithreads.Phương thức của lớpKhai báo - khởi tạo đối tượng (thể hiện) public class ConNguoi{ public String HoTen; phublic String CMND; public String thongTin(){ return CMND; } }Phân biệt kiểu cơ sở và kiểu đối tượngKiểu cơ sở: int i = 1;Kiểu đối tượng: ConNguoi SV1 = new ConNguoi();Sau khi tạo: SV1SV1: ConNguoiHoTen = “”Phân biệt kiểu cơ sở và kiểu đối tượngTruy xuất đối tượng public class ConNguoi{ public String HoTen; public void hienTT(){ System.out.println(“..”); } public static void main( String args[ ] ){ ConNguoi SV1 = new ConNguoi(); SV1.HoTen = “Nguyễn Văn A”; SV1.hienTT();}Tham chiếu dữ liệu của đối tượng: bienDoiTuong.duLieuGọi phương thức của đối tượng: bienDoiTuong.tenPhuongthucHàm xây dựng/ Hàm tạo (Constructor)Là một loại phương thức đặc biệt của lớp.Dùng gọi tự động khi khởi tạo một thể hiện của lớp.Có thể dùng để khởi gán những giá trị măc định.Không có giá trị trả về.Có thể có tham số hoặc không có tham số.Phải có cùng tên với lớp và được gọi đến khi dùng từ khóa newHàm xây dựng/ Hàm tạo (Constructor)Lưu ý: thông thường để an toàn, dễ kiểm soát và làm chủ mã nguồn chương trình chúng ta nên khai báo một constructor cho lớp.Nếu một lớp không có constructor thì Java sẽ cung cấp cho lớp một constructor mặc định (default constructor). Những thuộc tính, biến của lớp sẽ được khởi tạo bởi các giá trị mặc định (số: thường là giá trị 0, kiểu luận lý là giá trị false, kiểu đối tượng giá trị null, )Hàm xây dựng/ Hàm tạo (Constructor)Hàm tạo có đối số ConNguoi(String t) { HoTen = t; }Hàm tạo không có đối số ConNguoi(){ HoTen = “Nguyễn Văn A”; }Tạo đối tượng sử dụng hàm tạo ConNguoi SV1 = new ConNguoi(“Nguyen Van A);Hàm xây dựng/ Hàm tạo (Constructor) public class ConNguoi { public CoNguoi() { } public ConNguoi(String s_HoTen, String s_CMND){ HoTen = s_HoTen; CMND = s_CMND; } public static void main( String args[ ] ){ ConNguoi p1= new ConNguoi(“Lan”, “351xxxxxx”); ConNguoi p2= new ConNguoi(); }p1: có HoTen = “Lan”, CMND = 351xxxxxxp2: có HoTen = “”, CMND = “”31 public class XeMay{ // khai báo fields public float tinhGiaBan(){ return 2 * chiphisx; } public float tinhGiaBan(float huehong){ return (2 * chiphisx + huehong); } }Chồng phương thứcViệc khai báo trong một lớp nhiều phương thức có cùng tên nhưng khác tham số (khác kiểu dữ liệu, khác số lượng tham số) gọi là khai báo chồng phương thức (overloading method).Các biến, hằng, phương thức tĩnhTừ bổ nghĩa static được dùng để khai báo các biến, hằng và phương thức sử dụng chung trong lớp.Hằng static: public final static double PI=3.1416;Biến static:Chỉ phụ thuộc vào lớp mà không phụ thuộc vào đối tượng.Biến static có thể truy cập trực tiếp bằng tên class mà không cần bất kỳ đối tượng nào. Cú pháp: Tên_class.Tên_biến _static Biến không static: Tên_đối_tượng.Tên_biếnBiến static chỉ khởi tạo một lần khi chương trình bắt đầu thực thiCác biến, hằng, phương thức tĩnh public class BienTinh{ public static int count = 0; public int a = 0; public BienTinh() { count++; a++; } public static void main(String[] args) { BienTinh b1 = new BienTinh(); System.out.println("count lần 1 = "+BienTinh.count); System.out.println("b1.a = "+b1.a); BienTinh b2 = new BienTinh(); System.out.println("count lần 2= "+BienTinh.count); System.out.println("b2.a = "+b2.a); } }//biến count dùng chung cho tất cả các đối tượng (b1 và b2).Các biến, hằng, phương thức tĩnh public class BienTinh{ public static int count = 0; public int a = 0; public BienTinh() { count++; a++; } public static void main(String[] args) { BienTinh b1 = new BienTinh(); System.out.println("count lần 1 = "+BienTinh.count); System.out.println("b1.a = "+b1.a); BienTinh b2 = new BienTinh(); System.out.println("count lần 2= "+BienTinh.count); System.out.println("b2.a = "+b2.a); } }//biến count dùng chung cho tất cả các đối tượng (b1 và b2).Các biến, hằng, phương thức tĩnhPhương thức static: Chỉ phụ thuộc và lớp mà không phụ thuộc vào đối tượng.Phương thức static có thể truy cập trực tiếp bằng tên class mà không cần bất kỳ đối tượng nào. Cú pháp : Tên_lớp.Tên_phương_thức_staticPhương thức static chỉ có thể truy cập vào các thành phần static mà không thể truy cập vào các thành phần không static. public static int getNum(){ return num; }Từ khóa thisThay thế cho đối tượng hiện tại.Gọi các constructor khác của đối tượng. public class SinhVien{ float DiemTB; String HoTen; // Contructor của lớp A public SinhVien(float so, String ten){ this.DiemTB = so; this.HoTen = ten; } float tinhDiemTB() { // } void hienThi(){ this.tinhDiemTB() } }Mảng đối tượngKhai báo: ConNguoi[] SV = new ConNguoi[10];Khởi tạo: for(int i=0; I = 0 ? circleRadius:0 ); } public String toString(){ return "Center = " + super.toString() + "; Radius = " + radius; } public String getName() // trả về tên của shape{ return "Circle"; } }