Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 67 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
67
Dung lượng
591,5 KB
Nội dung
LECTURE GIỚI THIỆU VỀ LỚP VÀ ĐỐI TƯỢNG TRONG JAVA Các khái niệm bản: class, kế thừa (inheritance), trừu tượng (abstract), đa hình (polymorphism), interface, constructor., từ khóa final Ý nghĩa chúng việc trừu tượng hóa đối tượng Khái niệm overload, override Ép kiểu (casting) , từ khóa instance of, auto-boxing (Java trở lên) Khái niệm phạm vi class (public, private, nested class), phạm vi method (public, private, protected) PHẦN LỚP (CLASS) KHÁI NIỆM LỚP (CLASS) • Lớp xem khuôn mẫu (template) đối tượng (Object) • Trong lớp bao gồm thuộc tính đối tượng (properties) phương thức (methods) tác động lên thuộc tính • Đối tượng xây dựng từ lớp nên gọi thể lớp (class instance) KHAI BÁO LỚP class { ; ; … constructor1 constructor2 … method_1 method_2 … class } • • • • • class: từ khóa java ClassName: tên đặt cho lớp field_1, field_2: thuộc tính (các biến, hay thành phần liệu lớp) Constructor1, constructor2: phương thức xây dựng, khởi tạo đối tượng lớp method_1, method_2: phương thức (có thể gọi hàm) thể thao tác xử lý, tác động lên thuộc tính lớp THUỘC TÍNH CỦA LỚP • Vùng liệu (fields) hay thuộc tính (properties) lớp khai báo bên lớp sau: class { // khai báo thuộc tính lớp field1; // … } • Để xác định quyền truy xuất đối tượng khác vùng liệu lớp người ta thường dùng tiền tố sau: – – – – – public, private protected Và tiền tố đặc biệt rỗng static: liệu static chứa giá trị vùng nhớ chung, dùng cho lớp ngồi private protected • private: Sử dụng private để ẩn hoàn toàn thành phần lớp (dữ liệu, phương thức), chúng truy nhập từ bên ngồi lớp • protected: Sử dụng protected phép thành phần class truy nhập subclass package nào, class package • từ khóa sử dụng cho thành phần class, khơng thể sử dụng cho class ngồi public default modifiers • no modifier: Sử dụng default modifier (no modifier) thành phần class truy nhập từ lớp package, khơng thể từ package khác • public: Sử dụng public cho phép thành phần class truy nhập từ lớp • public default modifier sử dụng cho thành phần class, sử dụng cho class THUỘC TÍNH CỦA LỚP Ví dụ: public class Xemay { public String nhasx; public String model; private float chiphisx; protected int thoigiansx; // so luong so cua xe may: 3, protected int so; // sobanhxe biến tĩnh có giá trị tất // thể tạo từ lớp xemay public static int sobanhxe = 2; } THUỘC TÍNH CỦA LỚP Lưu ý: • Thơng thường để an tồn cho vùng liệu đối tượng người ta tránh dùng tiền tố public, mà thường chọn tiền tố private để ngăn cản quyền truy cập đến vùng liệu lớp từ phương thức bên lớp PHƯƠNG THỨC (METHOD) CỦA LỚP • Hàm hay phương thức (method) Java khối lệnh thực chức năng, hành vi xử lý lớp lên vùng liệu Khai báo phương thức: () { ; } • Để xác định quyền truy xuất đối tượng khác phương thức lớp người ta thường dùng tiền tố sau: public, protected, private, static, final, abstract, synchronized – : kiểu void, kiểu sở hay lớp – : đặt theo qui ước giống tên biến – : rỗng 10 GIẢI THÍCH (lớp Circle) • Lớp Circle dẫn xuất từ lớp Point, đường trịn tích 0.0, phương thức volume() lớp cha khơng khai báo chồng, thừa kế từ lớp Point, mà lớp Point thừa kế từ lớp Shape • Diện tích đường trịn khác với điểm, phương thức tính diện tích area() khai báo chồng • Phương thức getName() thực phương thức trừu tượng khai báo lớp cha, phương thức getName() khơng khai báo lớp Circle kế thừa từ lớp Point • Phương thức setRadius dùng để gán bán kính (radius) cho đối tượng đường tròn, phương thức getRadius trả bán kính đối tượng đường trịn 53 VÍ DỤ 1: VỀ TÍNH ĐA HÌNH (lớp Cylinder) Định nghĩa lớp Cylinder tập tin Cylinder.java Lớp Cylinder thừa kế từ lớp Circle public class Cylinder extends Circle { protected double height; // chiều cao Cylinder public Cylinder() // constructor khơng có tham số { // ngầm gọi đến constructor lớp cha setHeight( ); } // constructor có tham số public Cylinder( double cylinderHeight, double cylinderRadius, int xCoordinate,int yCoordinate ) { // Gọi constructor lớp cha super( cylinderRadius, xCoordinate, yCoordinate ); setHeight( cylinderHeight ); } //còn tiếp slide sau 54 VD1: VỀ TÍNH ĐA HÌNH (lớp Cylinder-tt) public void setHeight( double cylinderHeight ) { // Gán chiều cao cho Cylinder height = ( cylinderHeight >= ? cylinderHeight:0 ); } public double getHeight() // Lấy chiều cao Cylinder { return height; } public double area() // Tính diện tích xung quanh Cylinder { return * super.area() + * Math.PI * radius *height; } public double volume() // Tính thể tích Cylinder { return super.area() * height;} public String toString() // Biểu diễn Cylinder chuỗi { return super.toString() + "; Height = " + height; } public String getName() // trả tên shape { return "Cylinder"; } } // end class Cylinder 55 GIẢI THÍCH (lớp Cylinder) • Lớp Cylinder dẫn xuất từ lớp Circle Một Cylinder (hình trụ) có diện tích thể tích khác với Circle (hình trịn), hai phương thức area() volume() cần phải khai báo chồng • Phương thức getName() thực phương thức trừu tượng lớp cha, phương thức getName() không khai báo lớp Cylinder kế thừa từ lớp Circle • Phương thức setHeight dùng để gán chiều cao cho đối tượng hình trụ • Cịn phương thức getHeight trả chiều cao đối tượng hình trụ 56 VÍ DỤ 1: VỀ TÍNH ĐA HÌNH (test) File Test.java dùng để kiểm tra tính kế thừa Point, Circle, Cylinder với lớp trừu tượng Shape import java.text.DecimalFormat; public class Test { // Kiểm tra tính kế thừa đối tượng hình học public static void main( String args[] ) { // Tạo đối tượng hìnhhọc Point point = new Point( 7, 11 ); Circle circle = new Circle( 3.5, 22, ); Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 ); // Tạo mảng đối tượng hình học Shape arrayOfShapes[] = new Shape[ ]; // arrayOfShapes[ ] đối tượng Point arrayOfShapes[ ] = point; // arrayOfShapes[ ] đối tượng Circle arrayOfShapes[ ] = circle; // arrayOfShapes[ ] đối tượng cylinder arrayOfShapes[ ] = cylinder; //còn tiếp slide sau 57 VÍ DỤ 1: VỀ TÍNH ĐA HÌNH (test - tt) // Lấy tên biểu diễn đối tượng hình học String output = point.getName() + ": " + point.toString() + "\n" + circle.getName() + ": " + circle.toString() + "\n" + cylinder.getName() + ": " + cylinder.toString(); DecimalFormat precision2 = new DecimalFormat("0.00" ); // duyệt mảng arrayOfShapes lấy tên, diện tích, thể tích // đối tượng hình học mảng for ( int i = 0; i < arrayOfShapes.length; i++ ) { output += "\n\n" + arrayOfShapes[ i ].getName() +": " + arrayOfShapes[ i].toString() +"\n Area = " + precision2.format( arrayOfShapes[ i ].area() ) +"\nVolume = " + precision2.format( arrayOfShapes[ i ].volume() ); } System.out.println(output); System.exit( ); } } // end class Test 58 VD2: VỀ TÍNH ĐA HÌNH (interface Shape) Tương tự ví dụ ví dụ dùng interface để định nghĩa cho Shape thay lớp trừu tượng Vì tất phương thức tron interface Shape phải thực lớp Point lớp cài đặt trực tiếp interface Shape // Định nghĩa interface Shape tập tin shape.java public interface Shape { // Tính diện tích public abstract double area(); // Tính thể tích public abstract double volume(); // trả tên shape public abstract String getName(); } 59 VD2: VỀ TÍNH ĐA HÌNH (lớp Point) Lớp Point cài đặt, thực interface tên shape Định nghĩa lớp Point tập tin Point.java public class Point extends Object implements Shape { protected int x, y; // Tọa độ x, y điểm public Point() // constructor không tham số { setPoint( 0, ); } public Point(int xCoordinate, int yCoordinate) // constructor có tham số { setPoint( xCoordinate, yCoordinate ); } public void setPoint( int xCoordinate, int yCoordinate ) // gán tọa độ x, y cho điểm { x = xCoordinate; y = yCoordinate; } //còn tiếp slide sau 60 VD2: VỀ TÍNH ĐA HÌNH (lớp Point - tt) // lấy tọa độ x điểm public int getX() { return x; } public int getY() // lấy tọa độ y điểm { return y; } public String toString() // Thể tọa độ điểm dạng chuỗi { return "[" + x + ", " + y + "]"; } public double area() // Tính diện tích { return 0.0; } public double volume() // Tính thể tích { return 0.0; } public String getName() // trả tên đối tượng shape { return "Point"; } } // end class Point 61 VD2: VỀ TÍNH ĐA HÌNH (lớp Circle) Lớp Circle lớp lớp Point, cài đặt/hiện thực gián tiếp interface tên shape Định nghĩa lớp Circle tập tin Circle.java public class Circle extends Point { // Dẫn xuất từ lớpPoint protected double radius; public Circle() // constructor không tham số { // ngầm gọi đến constructor lớp cha setRadius( ); } // constructor có tham số public Circle( double circleRadius, int xCoordinate, int yCoordinate ) { // gọi constructorcủa lớp cha super( xCoordinate, yCoordinate ); setRadius( circleRadius ); } //còn tiếp slide sau 62 VD2: VỀ TÍNH ĐA HÌNH (lớp Circle - tt) public void setRadius( double circleRadius ) // Gán bán kính đường trịn { radius = ( circleRadius >= ? circleRadius:0 ); } public double getRadius() // Lấy bán kính đường trịn { return radius; } public double area() // Tính diện tích đường trịn Circle { return Math.PI * radius * radius; } public String toString() // Biểu diễn đường tròn chuỗi { return "Center = " + super.toString() + "; Radius = " + radius; } // trả tên shape public String getName() { return "Circle"; } } // end class Circle 63 VD2: VỀ TÍNH ĐA HÌNH (lớp Cylinder) Định nghĩa lớp hình trụ Cylinder tập tin Cylinder.java public class Cylinder extends Circle { protected double height; // chiều cao Cylinder public Cylinder() // constructor khơng có tham số { // ngầm gọi đến constructor lớp cha setHeight( ); } // constructor có tham số public Cylinder( double cylinderHeight, double cylinderRadius, int xCoordinate,int yCoordinate ) { // Gọi constructor lớp cha super( cylinderRadius, xCoordinate,yCoordinate ); setHeight( cylinderHeight ); } public void setHeight( double cylinderHeight ) // Gán chiều cao cho Cylinder { height = ( cylinderHeight >= ? cylinderHeight:0 ); } //còn tiếp slide sau 64 VD2: VỀ TÍNH ĐA HÌNH (lớp Cylinder-tt) public double getHeight() // Lấy chiều cao Cylinder { return height; } public double area() // Tính diện tích xung quanh Cylinder { return * super.area() + * Math.PI * radius * height; } public double volume() // Tính thể tích Cylinder { return super.area() * height; } public String toString() // Biểu diễn Cylinder chuỗi { return super.toString() + "; Height = " + height; } // trả tên shape public String getName() { return "Cylinder"; } } // end class Cylinder 65 VD2: VỀ TÍNH ĐA HÌNH (test) Tập tin Test.java để kiểm tra tính kế thừa Point, Circle, Cylinder với interface Shape import java.text.DecimalFormat; public class Test // Kiểm tra tính kế thừa đối tượng hình học { public static void main( String args[] ) { // Tạo đối tượng hìnhhọc Point point = new Point( 7, 11 ); Circle circle = new Circle( 3.5, 22, ); Cylinder cylinder = new Cylinder( 10, 3.3, 10, 10 ); Shape arrayOfShapes[] = new Shape[ ]; // Tạo mảng đối tượng hình học // arrayOfShapes[ ] đối tượng Point arrayOfShapes[ ] = point; arrayOfShapes[ ] = circle; // arrayOfShapes[ ] đối tượng Circle arrayOfShapes[ ] = cylinder; // arrayOfShapes[ ] đối tượng cylinder // Lấy tên biểu diễn đối tượng hình học String output = point.getName() + ": " + point.toString() + "\n" + circle.getName() + ": " + circle.toString() + "\n“ + cylinder.getName() + ": " + cylinder.toString(); DecimalFormat precision2 = new DecimalFormat("0.00" ); //còn tiếp slide sau 66 VD2: VỀ TÍNH ĐA HÌNH (test - tt) // duyệt mảng arrayOfShapes lấy tên, diện tích, thể tích // đối tượng hình học mảng for ( int i = 0; i < arrayOfShapes.length; i++ ) { output += "\n\n" + arrayOfShapes[ i ].getName() + ": " + arrayOfShapes[ i].toString() + "\n Area = " + precision2.format( arrayOfShapes[ i ].area() ) + "\nVolume = " + precision2.format( arrayOfShapes[ i ].volume() ); } System.out.println(output); System.exit( ); } } // end class Test 67 ... LỚP (CLASS) KHÁI NIỆM LỚP (CLASS) • Lớp xem khuôn mẫu (template) đối tượng (Object) • Trong lớp bao gồm thuộc tính đối tượng (properties) phương thức (methods) tác động lên thuộc tính • Đối tượng. .. source code), thực lớp dẫn xuất từ lớp synchronized: dùng để ngăn tác động đối tượng khác lên đối tượng xét đồng hóa Dùng lập trình multithreads 11 PHƯƠNG THỨC (METHOD) CỦA LỚP Ví dụ: public class... hit(); } } 23 Lớp Object • Mọi lớp Java extends lớp • Nếu ta khơng rõ lớp sở, lớp tạo tự động extends lớp Object – Mọi lớp Java chứa phương thức chức định nghĩa lớp Object • phương thức lớp Object