1 / 87

Chapter 4 Java Classes & Objects

Chapter 4 Java Classes & Objects. Nguyễn Thị Thanh Vân - CNTT. Nội dung. Class Object Access Modifier: public, private, protected Static Inheritence Constructor Overloading và Overriding this() và super(); Truyền tham số và các lời gọi hàm Interface.

stasia
Download Presentation

Chapter 4 Java Classes & Objects

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 4Java Classes & Objects Nguyễn Thị Thanh Vân - CNTT

  2. Nội dung • Class • Object • Access Modifier: public, private, protected • Static • Inheritence • Constructor • Overloading và Overriding • this() và super(); • Truyền tham số và các lời gọi hàm • Interface

  3. Chương trình được tạo thành từ các đối tượng • Mỗi đối tượng chịu trách nhiệm thực hiện một tập tác vụ có liên quan với nhau • Đối tượng có thể yêu cầu một đối tượng khác thực hiện tác vụ. • “If I can’t do it, then I’ll ask somebody who can.” • Các đối tượng tương tác với nhau bằng cách gởi thông điệp

  4. Khái niệm lớp (Class) • Mẫu (khung thức) mà từ đó các đối tượng thực sự được tạo ra • Tất cả các đoạn code trong Java đều nằm bên trong một lớp • Khi ta xây dựng một đối tượng (object) từ một lớp, có thể nói ta đã tạo một thể hiện (instance) của lớp

  5. Classes • La dơn vị cơ bản trong lập trình Java.

  6. Định nghĩa lớp [<phạm vi hoặc kiểm soát truy nhập>] class <Tên lớp> [extends <Tên lớp cha>] [implements<tên giao diện>] { <Các thành phần của lớp> } class, extends, implements: từ khóa • Các kiểu lớp trong Java: • Built-in • User-defined

  7. class • Một chương trình có thể có nhiều lớp và các lớp có thể: • Trong 1 file duy nhất. • Trong nhiều file khác nhau, và các file này có thể nằm trong cùng một Package hay nằm trong nhiều Package khác nhau class abc { class cdf { void method1() {} void method2() {} } class ghk { } public static void main(String[] args) { ....... } }

  8. Sử dụng class • Lớp được sử dụng khi chương trình cần một đối tượng có kiểu của lớp đó. <tên lớp> <tên đối tượng> = new <tên lớp>(); • Ví dụ Person myClass = new Person();

  9. Định nghĩa hàm thành phần/p thức • Hàm: Hành vi của các đối tượng trongmột lớp • Cú pháp định nghĩa: [<Phạm vi hoặc thuộc tính kiểm soát truy nhập>]<Kiểu trả về><Tên phương thức> ([<Danh sách tham biến hình thức>]) [<Mệnh đề throws>] { <Nội dung pt> } • Trong đó • <Kiểu trả về> có thể là kiểu nguyên thủy, kiểu lớp hoặc không có giá trị trả lại (kiểu void) • <Danh sách tham biến hình thức> bao gồm dãy các tham biến (kiểu và tên) phân cách với nhau bởi dấu phẩy.

  10. Method • The flow of control following method invocations

  11. Ex: Lớp RectangleDemo • Để có thể thực thi, chương trình Java phải có một lớp định nghĩa phương thức main • Phương thức main() được gọi bởi JVM để bắt đầu chương trình.

  12. Khái niệm đối tượng • Đối tượng là một thể hiện của một lớp • Mỗi đối tượng có các hành vi được định nghĩa bởi các phương thức mà ta có thể gọi • Ta có thể làm gì với đối tượng này? • Các phương thức nào ta có thể áp dụng cho nó?

  13. Tạo đối tượng • Một đối tượng phải được tạo trước khi sử dụng trong một chương trình • Declaration: Class_name object_name; • Instantiation: Object_name = new class_name();

  14. Accessing data members of a class Example: class circle { int x, y, radius; void setRadius(int r) { Radius = r; } void display() { Graphics g = getGraphics(); g.drawOval(x,y,radius,radius); } } …. circle myShape = new circle(); myShape.setRadius(100); myShape.x=100; myShape.y=100; myShape.display(); Syntax to access the data members of a class outside the class: object_name.data_member_name Or object_name.method_name

  15. Access modifer • Chỉ ra mức độ truy xuất được cho phép đối với các thành phần dữ liệu và các phương thức của đối tượng • public: có thể được truy cập mọi nơitrong hệ thống và được thừa kế bởi các lớp con của nó. • private: có thể được truy cập trong chính lớp đó. Không cho phép kế thừa • protected: có thể được truy cập và thừa kế bởi các lớp con và có thể truy xuất bởi mã lệnh của cùng gói đó. • Default (không khai báo 3 kiểu trên): chỉ cho phép truy nhập đối với các lớp trong cùng gói, kể cả các lớp con. Không cho phép kế thừa.

  16. Public-ex

  17. Protected-ex

  18. Private

  19. Default

  20. Đặc tính Static • Khi khai báo các thành phần của lớp: • có staitc: những thành phần đó dùng chung cho tất cả đối tượng trong một lớp • Không có static: thường mỗi biến đều có bản sao các giá trị riêng của từng đối tượng. • Truy nhập tới các thuộc tính dữ liệu static có thể thực hiện • Thông qua tên lớp • Thông qua tên đối tượng • Các hàm thành phần static chỉ được phép truy nhập các tp tĩnh khác, không cho phép truy nhập tới các tp không khai báo static

  21. Static variable- ex Biến x: bản sao class varStatic { int x=2; static int y=3; varStatic(){ x++; y++; } public static void main(String[] args){ varStatic So = new varStatic(); System.out.println(So.x); System.out.println(So.y); varStatic So1 = new varStatic(); System.out.println(So1.x); System.out.println(So1.y); } } Biến y dùng chung x: không thay đổi y: thay đổi

  22. Static method - ex class methodStatic { private int x=2; private static int y=3; public static void setxy() { x++; //error y++; } public static void main(String[] args){ methodStatic So2 = new methodStatic(); So2.setxy(); System.out.println(So2.x); System.out.println(So2.y); } } Cannot make a static reference to the non-static field x

  23. Thừa kế (Inheritance) • Khái niệm • Cú pháp • Truy cập thành phần lớp cha • Toán tử tạo lập • Kế thừa constructor • Chuỗi constructors • Nạp chồng phương thức • Ghi đè phương thức • Toán tử móc xích giữa các lớp kế thừa • Ngăn kế thừa với khai báo final

  24. Thừa kế (Inheritance) • Tạo ra một lớp mới từ lớp có sẵn • Sử dụng lại thuộc tính và phương thức

  25. Inheritance • Superclass (Base class) • Là lớp mà từ đó lớp con được dẫn xuất • Có thể gọi là lớp cơ sở hoặc lớp cha • Subclass (Derived class) • Là lớp được dẫn xuất từ lớp khác • Có thể gọi là lớp dẫn xuất hoặc lớp con • có thể kế thừa: • các thuộc tính dữ liệu và • hàm tp của lớp cha; - và • có thể bổ sung thêm để xác định thêm t/c, hành vì của những đt cụ thể hơn.

  26. Inheritance • Sử dụng từ khoá extends để khai báo sự thừa kế • Một lớp có thể dẫn xuất trực tiếp từ duy nhất một lớp (đơn thừa kế) • Nếu một lớp không có bất kỳ lớp cha nào thì mặc nhiên nó cũng được dẫn xuất từ lớp Object • Lớp Object là cha của tất cả các lớp trong Java • Một lớp con có thể thừa kế tất cả các thành phần được khai báo protected và public của lớp cha

  27. Inheritance Example: class Parent { … } class Child1 extends Parent { //Các thuộc tính dữ liệu bổ sung // các hàm tp bổ sung } class Child2 extends Parent { … }

  28. Ví dụ về thừa kế

  29. Member access & Inheritance Inheriting a class does not overrule the private access restriction. Thus, even though a subclass includes all of the members of its superclass, it cannot access those members of the superclass that have been declared private. class vdInher { private double width; private double height; void showDim() { System.out.println("Width and height are:“+width + " and " + height); } public static void main(String[] args){ Triangle ve1 = new Triangle(); ve1.showDim(); System.out.println(ve1.area()); ve1.showStyle(); } } class Triangle extends vdInher { String style; double area() { return width * height / 2;//(1) } } Erorr

  30. Solution public static void main(String[] args){ Triangle ve1 = new Triangle(); ve1.showDim(); System.out.println(ve1.area()); ve1.showStyle(); } } class Triangle extends vdPrivate { String style; double area() { return getWidth()*getHeight()/2; } void showStyle() { System.out.println("Triangle is “+ style); } } class vdPrivate { private double width; private double height; double getWidth(){ return width;} double getHeight(){ return height;} void showDim(){ System.out.println("Width and height are“+Width+" and “+height); }

  31. Constructor – toán tử tạo lập • Constructor: • là một phương thức đặc biệt(không có hoặc có nhiều tham số) • không có giá trị trả về và có tên trùng với tên lớp • đặt các giá trị khởi tạo cho các đối tượng • khi một đối tượng được tạo, dùng với toán tử new • Có thể có nhiều hơn một constructor • Trường hợp không có constructor:trình biên dịch sẽ cung cấp constructor mặc định (không làm gì cả, null, false,0) cho lớp đó.

  32. Khai báo constructor [<thuộc tính>] <tên lớp> (<ds tham biến>){ // Nội dung cần tạo lập } [<thuộc tính>]: public, protected, private, default.

  33. Constructor class VdConstructor { private int x,y; public static void main(String[] args) { VdConstructor So = new VdConstructor(); So.x=5;So.y=10; System.out.println(So.x); System.out.println(So.y); } } class VdConstructor { private int x,y; VdConstructor(){ x=5; y=10; } public static void main(String[] args) { VdConstructor So = new VdConstructor(); System.out.println(So.x); System.out.println(So.y); } } Class without constructor Class with constructor

  34. Nhiều Constructor

  35. Thừa kế constructor • Constructor không thể thừa kế từ lớp cha như các loại phương thức khác • Cách gọi constructor: • Không có lời gọi tường minh đến Constructor của lớp cha tại lớp con: • trình biên dịch sẽ tự động chèn lời gọi tới Constructor mặc nhiên (implicity) hoặc Constructor không tham số (explicity) của lớp cha trước khi thực thi đoạn code khác trong Constructor lớp con • Có gọi tường minh constructor của lớp cha bằng cách sử dụng từ khoá super trong phần đặc tả constructor của lớp dẫn xuất

  36. Parent F1 F2 Chuỗi constructor

  37. Chuỗi constructor • Thể hiện của lớp dẫn xuất luôn gọi constructor của lớp cơ sở trước rồi mới đến constructor của lớp dẫn xuất

  38. Các nguyên tắc của Constructor • Constructor mặc nhiên (default constructor) sẽtựđộngsinhrabởitrìnhbiêndịchnếulớpkhôngkhaibáoConstructor.

  39. Ex: Parent()

  40. Ex ?: Parent() default Muốn dùng Parent(value) ? – moc xich

  41. Toán tử móc xích giữa các lớp kế thừa • Các toán tử tạo lập: • có thể được nạp chồng (Overloading) trong cùng 1 lớp. • không thể viết đè (Override) ở các lớp con. • Java có 2 toán tử tạo lập: this() và super() • This(): sử dụng để tạo ra đối tượng của cùng lớp hiện thời • Supper(): được sử dụng trong các toán tử tạo lập của lớp con để truy xuất đến các thành phần và constructor của lớp cha từ lớp con

  42. Ex: this() class Ve2C{ protected double x,y; public Ve2C(double x,double y) { x=x; y=y; } public void move(double dx, double dy) { x=x+dx; y=y+dy; } public void print() { System.out.println("x="+x+", y="+y); } public static void main(String[] args) { Ve2C p=new Ve2C(3.0,6.0); System.out.println("Toa do dau:"); p.print(); p.move(-1.5,2.0); System.out.println("Toa do sau:"); p.print(); } } this.x=x; this.y=y;

  43. Inheritance - super class B extends A { B () { [super();] ... } B (int i, int j) { super(i); ... } methodB(int k){ super.methodA(k); } } // end class B class A { A () { } A (inti) { } methodA(int x) { … } } // end class A

  44. Supper() - ex class Ve3C extends Ve2C { protected double z; public Ve3C(double x, double y, double z) { super(x,y); // t.kế constructor this.z=z; // } public void move(double dx, double dy, double dz) { super.move(dx,dy); // t.kế method z+=dz; //bổ sung thêm } public void print() { super.print(); //t.kế method System.out.print(" z="+z); } public static void main(String[] args) { Ve3C p=new Ve3C(3.0,4.5,5.0); System.out.println("Toa do dau:"); p.print(); System.out.println(); p.move(-1.0,0.5,-1.0); System.out.println("Toa do sau:"); p.print(); System.out.println(); } }

  45. Triệu hồi tường minh Constructor lớp cha (explicitly)

  46. Ví dụ

  47. Nạp chồng các phương thức • Nạp chồng các phương thức (overloading): • cùng 1 tên, • cùng lớp • khác nhau về danh sách tham số • khác nhau về số lượng hoặc • khác nhau về thứ tự các kiểu. • Ex, JDK API có lớp java.lang.Math có nhiều hàm nạp chồng (min())

  48. Ex - Overloading class TinhToan { public static void main(String[] args) { Tinh c = new Tinh(); c.add(10,20); c.add(40.0f,35.65f); c.add("Good ","Morning"); } } class Tinh { public void add(int a, int b) { int c = a+b; System.out.println("Phep cong hai so nguyen :"+c); } public void add(float a, float b) { float c = a+b; System.out.println("Phep cong hai so dau phay dong :"+c); } public void add(String a, String b) { String c = a+b; System.out.println("Phep cong hai xau :"+c); } };

  49. Ghi đè phương thức • Ghi đè phương thức (Overriding) là: • Lớp con định nghĩa phương thức mới có cùng dấu hiệu với phương thức ở lớp cha. (khác lớp) • Dấu hiệu(signature) bao gồm: • Số lượng tham số • Kiểu dữ liệu của tham số • Thứ tự của tham số . • Khác kiểu trả về có được không?

  50. Ex: overriding classvd1 { publicstaticvoid main(String[] args) { Child c= new Child(); c.Infor(); } } class Parent { publicvoid Infor(){ System.out.println("Calling Parent..."); } } class Child extends Parent { publicvoid Infor(){ System.out.println("Calling Child..."); } }

More Related