Lập trình Java cơ bản - Chương 3: Lớp trong Java
Các khái niệm trong lập trình hướng đối tượng
Khai báo lớp
Các lớp lồng nhau
Lớp Abstract
Gói
Phạm vi truy cập
Interface
Thừa kếvàđa hình
Tóm tắt nội dung Lập trình Java cơ bản - Chương 3: Lớp trong Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
{ return radius * radius * 3.14159; } } 15/25 Khai báo lớp Khai báo & tạo đối tượng Khai báo đối tượng • Cú pháp: className objectName; • Ví dụ: Circle myCircle; Tạo đối tượng • Cú pháp: objectName = new className(); • Ví dụ: myCircle=new Circle(); myCircle=new Circle(5); 16/25 Khai báo & tạo đối tượng • Cú pháp: className objName=new className(); • Ví dụ: Circle myCircle=new Circle(); Circle myCircle=new Circle(5); 17/25 Khai báo & tạo đối tượng Tham chiếu dữ liệu của đối tượng: • Cú pháp: objectReference.data • Ví dụ: myCircle.radius Gọi phương thức của đối tượng: • Cú pháp: objectReference.method • Ví dụ: myCircle.findArea() myCircle.setRadius(6); 18/25 Khai báo & tạo đối tượng Ví dụ public class Main { public static void main(String args[]) { Circle myCircle=new Circle(2,1); doule area = myCircle.findArea() System.out.println("Area is " + area); } } 19/25 Là 1 tham chiếu đến đối tượng hiện tại Ví dụ class Circle { double radius = 1.0; int color; Circle(double radius, int color){ this.radius = newRadius; this.color=newColor; } Circle(newColor){ this(0,newColor); } } 20/25 Mở rộng – Từ khóa this Thuộc tính static • Ví dụ: static double radius=1.0; Phương thức static • Ví dụ: static double findArea(){ return radius * radius * 3.14159; } Có thể được truy cập qua tên lớp • Ví dụ: Circle.radius; Circle.findArea(); 21/25 Mở rộng – Từ khóa static Tất cả các đối tượng cùng 1 lớp chia sẻ các biến static trong lớp đó Phương thức static • Chỉ có thể gọi các phương thức static khác • Chỉ truy cập thuộc tính static • Không thể dùng từ khóa this để truy cập 22/25 Mở rộng – Từ khóa static Java cho phép định nghĩa 1 lớp bên trong 1 lớp khác Cấu trúc class OuterClass { ... static class StaticNestedClass { ... } class InnerClass { ... } } 23/25 Các lớp lồng nhau Ví dụ class Outer { int outer_x = 100; void test() { Inner inner = new Inner(); inner.display(); } class Inner { void display() { System.out.println("display: outer_x = " + outer_x); } } } public class Main { public static void main(String args[]) { Outer outer = new Outer(); outer.test(); } } 24/25 Các lớp lồng nhau Lớp bên ngoài không thể truy cập dữ liệu của lớp bên trong trực tiếp Ví dụ public class Main { int outer_x = 100; class Inner { int y = 10; void display() { System.out.println("display: outer_x = " + outer_x); } } void showy() { System.out.println(y); } } 25/25 Các lớp lồng nhau Tạo lớp mới từ lớp đã tồn tại • Lớp mới gọi là lớp con (subclass) • Lớp cũ gọi là lớp cha (superclass) Cú pháp: class subClass extends superClass{ } 26/25 Thừa kế Ví dụ 27/25 Thừa kế Shape String color; Shape(color); double calculateArea(); String getColor(); Circle double radius; double getRadius(); Rectangle Double length; Double width; Double getLength(); Double getWidth(); Ví dụ class A { A() { System.out.println(“Cấu trúc A"); } } class B extends A { B() { System.out.println(“Cấu trúc B"); } } class C extends B { C() { System.out.println(“Cấu trúc C"); } } public class Main{ public static void main(String args[]) { C c = new C(); } } 28/25 Thừa kế Gọi phương thức khởi tạo của lớp cha • Cú pháp: super(ds tham số) • Ví dụ public Circle(String myColor, double myRadius) { super(myColor); radius = myRadius; } 29/25 Thừa kế-Sử dụng từ khóa super Truy cập 1 thành phần của lớp cha • Cú pháp: super.tên • Ví dụ class Base { int i; } class SubClass extends Base { int i; SubClass(int a, int b) { super.i = a; i = b; } } 30/25 Thừa kế-Sử dụng từ khóa super Xảy ra khi 1 phương thức trong lớp con có cùng tên và kiểu trả về như 1 phương thức trong lớp cha Phương thức trong lớp cha sẽ bị che khuất Để truy cập phương thức trong lớp cha, sử dụng từ khóa super 31/25 Thừa kế - Chồng phương thức Ví dụ public class Shape { … public double calculateArea() { return 0; } } public class Circle{ … public double calculateArea() { return PI * radius * radius; } } 32/25 Thừa kế - Chồng phương thức So sánh với Quá tải phương thức (Overloading) • Xảy ra khi các phương thức có cùng tên nhưng khác nhau về tham số • Có thể khác nhau về kiểu trả về của phương thức Ví dụ 33/25 Thừa kế - Chồng phương thức class OverloadDemo { void test() { System.out.println("No parameters"); } void test(int a) { System.out.println("a: " + a); } void test(int a, int b) { System.out.println("a and b: " + a + " " + b); } double test(double a) { System.out.println("double a: " + a); return a * a; } } 34/25 Thừa kế - Chồng phương thức public class Shape { … public double calculateArea() { return 0; } } public class Circle{ … public double calculateArea() { return PI * radius * radius; } } public class Rectangle{ … public double calculateArea() { return width*height; } } 35/25 Đa hình (Polymorphism) public class Main { public static void main(String args[]) { Shape f = new Shape(); Rectangle r = new Rectangle(9, 5); Circle t = new Circle(10); Shape figref; figref = r; System.out.println("Area:"+figref.calculateArea()); figref = t; System.out.println("Area:"+figref.calculateArea()); figref = f; System.out.println("Area:"+figref.calculateArea()); } } 36/25 Đa hình (Polymorphism) Lớp Object Tất cả các lớp trong Java đều từ lớp Object 37/25 Phương thức equals: so sánh 2 biến cùng tham chiếu 1 đối tượng hay không • Cú pháp: ObjectName1.equals(ObjectName2) • Ví dụ: boolean b = object1.equals(object2) Toán tử instanceof: kiểm tra 1 đối tượng có thuộc lớp hay không • Cú pháp: objectNam instanceof className • Ví dụ: boolean b = object1 instanceof Rectangle 38/25 Lớp Object Gán • Câu lệnh đúng Object obj = new Circle(5); • Câu lệnh sai Circle myCircle = obj; Ép kiểu Circle myCircle = (Circle)obj; if (obj instanceof Circle) { Circle myCircle = (Circle)obj; } 39/25 Lớp Object Lớp Abstract Phương thức abstract: dùng để chỉ định 1 phương thức cần được viết chồng ở lớp con • Cú pháp: abstract type name(parameter-list); • Ví dụ: abstract void callme(); Lớp abstract: • Được khai báo vơi từ khóa abstract • Có thể có hoặc không chứa phương thức abstract • Không thể tạo đối tượng • Cú pháp: abstract class MyAbstractClass{ abstract type name(parameter-list); } 40/25 abstract class MyAbstractClass { abstract void callme(); void callmetoo() { System.out.println(“Day khong phai abstract"); } } class B extends MyAbstractClass { void callme() { System.out.println(“Thuc thi lop B"); } } public class Main { public static void main(String args[]) { B b = new B(); b.callme(); b.callmetoo(); } } 41/25 Là bộ chứa các lớp và các interface Trong Java, gói được thể hiện là các thư mục Tác dụng • Nhóm các thành phần liên quan • Giới hạn sự truy cập từ các thành phần bên ngoài • Tổ chức code dễ quản lý 42/25 Gói (Package) Khai báo gói package tên_gói; Khai báo gói đa cấp package pkg1[.pkg2[.pkg3]]; Ví dụ package graphics; public class Rectangle{ … public double calculateArea() { return width*height; } } 43/25 Gói (Package) Truy cập các thành phần thuộc gói • Sử dụng tên: graphics.Circle myCircle = new graphics.Circle(); • Sử dụng câu lệnh import để nạp thành phần import graphics.Rectangle; Rectangle myRectangle = new Rectangle(); • Sử dụng import để nạp toàn bộ gói import graphics.*; Circle myCircle = new Circle(); Rectangle myRectangle = new Rectangle(); 44/25 Gói (Package) Quản lý code • Khai báo gói • Các câu lệnh import • Khai báo các thành phần package MyPack; import java.util.Date; public class Main { public static void main(String args[]) { System.out.println(new Date()); } } 45/25 Gói (Package) Cách khai báo [modifier] class ten_lop{ [modifier] dataType ten_thuoctinh; [modifier] returnedValue ten_phuongthuc{ … } } 46/25 Phạm vi truy cập Phạm vi truy cập Java có 4 phạm vi truy cập cho các thành phần • public: được truy cập bởi tất cả các thành phần khác • private: được truy cập chỉ bởi các thành phần cùng lớp • protected: được truy cập bởi chỉ các lớp con • default (không khai báo): được truy cập bởi các thành phần cùng gói 47/25 Vị trí & phạm vi truy cập 48/25 Phạm vi truy cập 49/25 Phạm vi truy cập o Modifier của Alpha Khai báo [modifier] interface name { return-type method-name1(parameter-list); return-type method-name2(parameter-list); type final-varname1 = value; type final-varname2 = value; // ... return-type method-nameN(parameter-list); type final-varnameN = value; } Các biến ngầm định là: public, static, final 50/25 Interface Ví dụ interface MyInterface{ void callback(int param); } 51/25 Interface Tạo class từ interface [modifier] class classname [extends superclass] [implements interface [,interface...]] { // class-body } Trong Java, không cho phép thừa kế từ nhiều superclass nhưng có thể thừa kế từ nhiều interface 52/25 Interface Ví dụ interface MyInterface { void callback(int param); } class Client implements MyInterface{ public void callback(int p) { System.out.println(“Call:" + p); } } public class Main { public static void main(String args[]) { MyInterface c = new Client(); c.callback(42); } } 53/25 Interface Nếu 1 class thực thi interface không đầy đủ thì lớp đó phải là lớp abstract Ví dụ interface MyInterface { void callback(int param); void show(); } abstract class Incomplete implements MyInterface { int a, b; public void show() { System.out.println(a + " " + b); } } 54/25 Interface Interface có thể được thừa kế interface IntefaceA { void meth1(); void meth2(); } interface IntefaceB extends IntefaceA { void meth3(); } 55/25 Interface
File đính kèm:
- Lập trình Java cơ bản - Chương 3_Lớp trong Java.pdf