Phạm vi
protected: Được sử dụng trực tiếp:
Bên trong lớp
Các lớp cùng package
Các lớp con (cùng hoặc khác package)
private:
Được sử dụng trực tiếp bên trong lớp
public: Được sử dụng trực tiếp
Bên trong lớp
Bên ngoài lớp
Các lớp con cùng hoặc khác package + Các lớp khác cùng hoặc khác package
Một số từ khoá thông dụng
Truy xuất lớp hiện tại: this
Truy xuất đến lớp cha: super
Chỉ định phương thức khởi tạo của lớp cha: super(), super( )
Cài đặt lại phương thức của lớp cha
Override
public KieuDuLieu tenPhuongthuc( )
Lưu ý: phương thức static không được phép Override
Gọi phương thức của lớp cha: super.tenPhuongThuc(.)
Kiểm tra thể hiện của đối tượng: instanceOf
50 trang |
Chia sẻ: thanhle95 | Lượt xem: 590 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Lập trình Java - Chương 2: Lập trình hướng đối tượng ngôn ngữ JAVA, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 2:Lập trình hướng đối tượng ngôn ngữ JAVANội dungKế thừaKhai báo kế thừaPhạm vi sử dụng private, protected, public Một số từ khoá thông dụng Final method & Final ClassAbstract class & InterfaceArray List Tạo tài liệu Java docTạo UML Class diagramsKhai báo kế thừa 12345package tenpackage; public class TenLopCha { //Khai báo các thuộc tính //Khai báo các phương thức } 12345package tenpackage;public class TenLopCon extends TenLopCha{ //Khai báo các thuộc tính //Khai báo các phương thức } Object là lớp cơ sở nhất trong Java. Trong trường hợp một lớp không khai báo kế thừa từ bất kỳ lớp nào thì lớp Object chính là lớp cha của nóKhai báo kế thừa 12345package quanly;public class GiangVien { //Khai báo các thuộc tính //Khai báo các phương thức } 12345package bt1;public class GiangVienCoHuu extends GiangVien{ //Khai báo các thuộc tính //Khai báo các phương thức }Phạm viprotected: Được sử dụng trực tiếp: Bên trong lớpCác lớp cùng packageCác lớp con (cùng hoặc khác package) private: Được sử dụng trực tiếp bên trong lớp public: Được sử dụng trực tiếp Bên trong lớpBên ngoài lớp Các lớp con cùng hoặc khác package + Các lớp khác cùng hoặc khác package Một số từ khoá thông dụng Truy xuất lớp hiện tại: thisTruy xuất đến lớp cha: superChỉ định phương thức khởi tạo của lớp cha: super(), super() Cài đặt lại phương thức của lớp cha@Overridepublic KieuDuLieu tenPhuongthuc()Lưu ý: phương thức static không được phép Override Gọi phương thức của lớp cha: super.tenPhuongThuc(...) Kiểm tra thể hiện của đối tượng: instanceOf Một số từ khoá thông dụng instanceOf 123456789A a = new A();B b = new B();if (a instanceof A) { System.out.println(“a is an instance of A");}if (b instanceof B) { System.out.println(“b is an instance of B");}Final method Final Method là một phương được khai báo với từ khóa final Final Method không được phép override ở lớp kế thừa Các phương thức tạo không được phép khai báo với từ khóa final 1234//Ví dụ: final public void TenPhuongThuc () {. . .} Final method 123456public class GiangVien { ... private String name;public final String getName () {. . .} public final void setName () {. . .} } 12345678public class GiangVienCoHuu extends GiangVien{ ... @Override public String getName(){ . . .} 🗷@Overridepublic void setName(){ . . .} 🗷} Lỗi: Không thể Override một phương thức finalFinal Class Final Class là một lớp được khai báo với từ khóa final Final Class không cho phép kế thừa Ví dụ:Integer, Double, Float, Long là các Final Class A là Final Class 🡪 Các lớp khác không thể kế thừa được lớp A Final Class 123public final class A{ ... } 123public class B extends A{ 🗷... } Lỗi: Không thể kế thừa một lớp finalAbstract Class Hình ảnh:Abstract ClassAbstract Class là một lớp được khai báo với từ khóa abstract. Abstract Class có thể chứa các phương thức abstract hoặc phương thức có cài đặt Phương thức abstract là phương thức không có cài đặt 12345public abstract class GiangVien { . . . public void nhap(){...} public abstract double tinhLuong(); } 123public abstract class GiangVien {} Abstract ClassAbstract Class không thể tạo thể hiện GiangVien gv = new GiangVien() 🗷Abstract Class có thể giữ tham chiếu đối tượng của các Sub Class1234GiangVien gv = new GiangVienCoHuu() 🗹GiangVienCoHuu gvch = new GiangVienCoHuu() 🗹GiangVien gv = new GiangVienThinhGiang() 🗹GiangVienThinhGiang gvtg = new GiangVienThinhGiang() 🗹Abstract Class Nếu các Sub Class không phải là Abstract Class thì:Bắt buộc phải cài đặt lại tất cả các phương thức abstract của lớp cha. Không bắt buộc cài đặt lại các phương thức không là abstract của lớp cha. Nếu các Sub Class là Abstract Class thì không bắt buộc phải cài đặt lại phương thức abstract / không abstract của lớp cha Abstract Class123456789package qlgv; public abstract class GiangVien{ //Khai báo các thuộc tính . . . //Khai báo và cài đặt các phương thức không là abstract . . . //Khai báo các phương phức abstract public abstract double tinhLuong(); }Abstract ClassSub Class GiangVienCoHuu bắt buộc cài đặt lại phương thức abstract tinhLuong() của lớp GiangVien. Sub Class GiangVienThinhGiang bắt buộc phải cài đặt lại phương thức abstract tinhLuong() của lớp GiangVien. Abstract Class123456789package qlgv; public class GiangVienCoHuu extends GiangVien{ . . . @Override public double tinhLuong() { . . . } } Abstract Class123456789package qlgv; public class GiangVienThinhGiang extends GiangVien{ . . . @Override public double tinhLuong() { . . . } } Interface Được khai báo với từ khóa interface public interface Hinh{} Interface chứa: Các hằng số Các phương thức abstract (không có cài đặt) 12345public interface Hinh{ public static final double PI=3.14; public void tinhDienTich(); public void tinhChuVi(); } Interface Một interface có thể kế thừa từ nhiều interface khácMột lớp có thể kế thừa từ 1 lớp và có thể cài đặt lại từ nhiều interface 123public interface IA{} public interface IB{} public interface IC extends IA, IB {} 1234public class A{} public interface IB{} public interface IC{} public class B extends A implements IB, IC{} Nếu một lớp khi implements từ một inteface thì lớp đó phải cài đặt lại tất cả các phương thức abstract của interface Interface 123public interface Hinh { public double tinhDienTich(); public double tinhChuVi(); }12345678910public class HinhTamGiac implements Hinh{ @Override public double tinhDienTich(){ . . . } @Override public double tinhChuVi(){ . . . } } Interface 123public interface Hinh { public double tinhDienTich(); public double tinhChuVi(); } 12345678910public class HinhTron implements Hinh{ @Override public double tinhDienTich(){ . . . } @Override public double tinhChuVi(){ . . . } } Interface 1234public interface Hinh { public double tinhDienTich(); public double tinhChuVi(); } 12345678910public class HinhChuNhat implements Hinh{ @Override public double tinhDienTich(){ . . . } @Override public double tinhChuVi(){ . . . } } Bài tập: Hình họcXây dựng các lớp HinhHoc, HinhChuNhat, HinhTamGiac, HinhTron và viết chương trình cho phép:Nhập vào một mảng hình học (có thể là HinhChuNhat, HinhTamGiac, HinhTron)Xuất ra mảng các hình họcTính tổng diện tíchTính tổng chu viTìm hình có chu vi lớn nhất / nhỏ nhất & Xuất raTìm hình có diện tích lớn nhât / nhỏ nhất & Xuất ra Kiểm tra tam giác đều, hình vuôngBài tập: Hình họcclass HinhHoc 123456789101112131415161718package demokethua; public abstract class HinhHoc { protected String ten; abstract public double TinhDienTich(); abstract public void Nhap(); final public String getTen() { return ten; } public void Xuat() { System.out.print(ten); } public HinhHoc() { ten = ""; } public HinhHoc(String ten) { this.ten = ten; } } class HinhChuNhat1234567891011121314151617package demokethua; import java.util.Scanner; public class HinhChuNhat extends HinhHoc { private double dai; private double rong; @Override public double TinhDienTich() { return dai * rong; } @Override public void Nhap() { Scanner scan = new Scanner(System.in); System.out.print("Nhap chieu dai: "); this.dai = Double.parseDouble(scan.nextLine()); System.out.print("Nhap chieu rong: "); this.rong = Double.parseDouble(scan.nextLine()); }class HinhChuNhat18192021222324252627282930313233 @Override public void Xuat() { super.Xuat(); System.out.println("D=" + dai + "; R=" + rong); } public HinhChuNhat() { super(); this.dai = 0; this.rong = 0; } public HinhChuNhat(String ten, double dai, double rong) { super(ten); this.dai = dai; this.rong = rong; } } class TamGiac123456789101112131415161718package demokethua; import java.util.Scanner; public class HinhTamGiac extends HinhHoc { private double a; private double b; private double c; @Override public void Nhap() { Scanner scan = new Scanner(System.in); System.out.print(\"Nhap canh thu nhat: \"); this.a = Double.parseDouble(scan.nextLine()); System.out.print(\"Nhap canh thu hai: \"); this.b = Double.parseDouble(scan.nextLine()); System.out.print(\"Nhap canh thu ba: \"); this.c = Double.parseDouble(scan.nextLine()); } class TamGiac181920212223242526272829303132333435363738 @Override public void Xuat() { System.out.println(String.format(\"A=%d-B=%d-C=%d\", a, b, c)); } @Override public double TinhDienTich() { return 0; } public HinhTamGiac() { super(); a = 0; b = 0; c = 0; } public HinhTamGiac(String ten, double a, double b, double c) { super(ten); this.a = a; this.b = b; this.c = c; } } Array List ArrayList ArrayList - Tạo Array ListThư viện import java.util.ArrayList; Tạo ArrayList rỗng ArrayList list = new ArrayList (); Tạo ArrayList từ Collection khác ArrayList list = new ArrayList (Collection c); Kiểu dữ liệu E: Kiểu tham chiếu Kiểu dữ liệu E hợp lệ: Kiểu tham chiếu. VD: Integer, Float, Double, String, Object, PhanSo, HocSinh, . . .Kiểu dữ liệu E không hợp lệ: Kiểu giá trị. VD: int, float, double, boolean , ArrayList - Tạo Array ListVí dụ tạo ArrayList hợp lệ: Ví dụ tạo ArrayList không hợp lệ: ArrayList list1 = new ArrayList (); ArrayList list2 = new ArrayList (); ArrayList list3 = new ArrayList (); 12345678//Mảng 1 chiều StringArrayList list1 = new ArrayList (); //Mảng 1 chiều PhanSoArrayList list2 = new ArrayList (); //Mảng 1 chiều PhanSoArrayList list3 = new ArrayList (list2); //Mảng 2 chiều HocSinhArrayList > list4 = new ArrayList > (); ArrayList - Một số phương thức thông dụngTạo ArrayList: new ArrayList list = new ArrayList ()Thêm vào cuối: add (E element) list.add (new PhanSo(1,2)); list.add (new PhanSo(3,4)); Cập nhật: set (int index, E element) list.set(0, new PhanSo(2,3)); ArrayList - Một số phương thức thông dụngXóa: remove (E element), remove (int index) Xóa toàn bộ: clear ()Ví dụ: list.remove (0); list.remove (ps); list.clear(); Lấy kích thước: size() int n = list.size(); ArrayList - Một số phương thức thông dụngLấy phần tử: get (int index) PhanSo ps = list.get(2); Kiểm tra tồn tại: contains() boolean kq = list.contains(ps); Bài tập ArrayList Xây dựng chương trình cho phép người dùng chọn các chức năng sau: Nhập vào danh sách các phân số, sau đó cho phép Xuất danh sách phân số Thêm phân số Xóa phân số tại vị trí thứ k Cập nhật phân số tại vị trí thứ k Tìm các phân số có giá trị lớn nhất Xóa tất cả các phân sốTạo Java DocJava Doc: Tạo tài liệu mô tả cấu trúc, diễn giải các thành phần của project.Giúp cho mã nguồn rõ ràng hơn, dễ dàng cho việc chia sẽ, mở rộng và nâng cấp về sau.Cách thực hiện:R-Click trên Project 🡪 Generate Java DocTạo Java DocCách viết comment để tạo tài liệu Java Doc:/** * Nội dung comment * * @thamso1 Giá trị * @thamso2 Giá trị */Tạo Java Doc123456789101112131415161718192021222324/** * Lớp Hình Chử Nhật * * @author He thong thong tin */public class HinhChuNhat extends HinhHoc { /** * * @return Chu vi của hình chử nhật = (dai + rong) * 2 */ @Override public double TinhChuVi(){ } /** * Hàm khởi tạo mặc định */ public HinhChuNhat() {} /** * Hàm khởi tạo có đầy đủ tham số * @param ten tên của hình * @param dai chiều dài của hình chử nhật * @param rong chiều rộng của hình chử nhật */ public HinhChuNhat(String ten, double dai, double rong) {}}Tạo Java DocTạo Java DocPhát sinh bởi Generate JavadocTạo UML Class DiagramCách 1:B1: Cài đặt UML Plugin cho Netbeans:Here is how to install on 7.1 Add a new configuration to update centers: Tools -> Plugins -> Settings -> AddAs the URL copy the following into the textbox: on the tab Available Plugins there should be UML in category UML. Install the plugin, and its done..!!Tạo UML Class DiagramTạo UML Class DiagramCách 1:B2: R-Click ở project 🡪 Chọn Reverse Engineering 🡪 Create New UML ProjectTạo UML Class DiagramTạo UML Class DiagramCách 2: Sử dụng yWorks UML docletDownload yWorks UML Doclet:ải nén file yworks-uml-doclet-3.0_02-jdk1.5.zip. Ghi nhớ thư mục đã giải nénCấu hình tham số lúc tạo Java Doc:Chọn project 🡪 R_Click🡪 Properties🡪Documenting🡪Additional javadoc Options R-Click ở project 🡪 Chọn Reverse Engineering 🡪 Create New UML Project-docletpath "C:\yworks-uml-doclet-3.0_02-jdk1.5\lib\ydoc.jar" -resourcepath "C:\yworks-uml-doclet-3.0_02-jdk1.5\resources" -doclet ydoc.doclets.YStandard –umlautogenC:\yworks-uml-doclet-3.0_02-jdk1.5 : Đường dẫn giải nén yWorks UML docletTạo UML Class DiagramKết quả