86
Java Simplified / Session 22 / 1 of 45 Chapter 4 Java Classes & Objects Nguyễn Thị Thanh Vân - CNTT

Chapter 4. java class object

Embed Size (px)

Citation preview

Page 1: Chapter 4. java class object

Java Simplified / Session 22 / 1 of 45

Chapter 4Java Classes & Objects

Nguyễn Thị Thanh Vân - CNTT

Page 2: Chapter 4. java class object

Java Simplified / Session 22 / 2 of 45

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

Nội dung

Page 3: Chapter 4. java class object

Java Simplified / Session 22 / 3 of 45

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

Chương trình được tạo thành từ các đối tượng

Page 4: Chapter 4. java class object

Java Simplified / Session 22 / 4 of 45

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

Khái niệm lớp (Class)

Page 5: Chapter 4. java class object

Java Simplified / Session 22 / 5 of 45

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

components

Data members (Attributes)

Method 1

Method 2

Classes

Page 6: Chapter 4. java class object

Java Simplified / Session 22 / 6 of 45

[<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

Định nghĩa lớp

Page 7: Chapter 4. java class object

Java Simplified / Session 22 / 7 of 45

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

class abc {class cdf {void method1() {}void method2() {} } class ghk { } public static void main(String[] args) {....... } }

Page 8: Chapter 4. java class object

Java Simplified / Session 22 / 8 of 45

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();

Sử dụng class

Page 9: Chapter 4. java class object

Java Simplified / Session 22 / 9 of 45

Hàm: Hành vi của các đối tượng trong mộ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.

Định nghĩa hàm thành phần/p thức

Page 10: Chapter 4. java class object

Java Simplified / Session 22 / 10 of 45

The flow of control following method invocations

• Để 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.

Method

Page 11: Chapter 4. java class object

Java Simplified / Session 22 / 11 of 45

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ó?

Page 12: Chapter 4. java class object

Java Simplified / Session 22 / 12 of 45

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ình1. Declaration:Class_name object_name;2. Instantiation:Object_name = new class_name();

Page 13: Chapter 4. java class object

Java Simplified / Session 22 / 13 of 45

Syntax to access the data members of a class outside the class:

object_name.data_member_nameOr

object_name.method_name

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();

Accessing data members of a class

Page 14: Chapter 4. java class object

Java Simplified / Session 22 / 14 of 45

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ơi trong 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.

Access modifer

Page 15: Chapter 4. java class object

Java Simplified / Session 22 / 15 of 45

Public-ex

Page 16: Chapter 4. java class object

Java Simplified / Session 22 / 16 of 45

Protected-ex

Page 17: Chapter 4. java class object

Java Simplified / Session 22 / 17 of 45

Private

Page 18: Chapter 4. java class object

Java Simplified / Session 22 / 18 of 45

Default

Page 19: Chapter 4. java class object

Java Simplified / Session 22 / 19 of 45

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

Đặc tính Static

Page 20: Chapter 4. java class object

Java Simplified / Session 22 / 20 of 45

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);

}}

Static variable- ex

Biến y dùng chung

Biến x: bản sao

x: không thay đổiy: thay đổi

Page 21: Chapter 4. java class object

Java Simplified / Session 22 / 21 of 45

class methodStatic {private int x=2;private static int y=3;public static void setxy() {x++; //errory++; }public static void main(String[] args){methodStatic So2 = new methodStatic();So2.setxy();System.out.println(So2.x);System.out.println(So2.y);}}

Static method - ex

Cannot make a static reference to the non-static field x

Page 22: Chapter 4. java class object

Java Simplified / Session 22 / 22 of 45

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

Thừa kế (Inheritance)

Page 23: Chapter 4. java class object

Java Simplified / Session 22 / 23 of 45

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

Page 24: Chapter 4. java class object

Java Simplified / Session 22 / 24 of 45

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.

Inheritance

Page 25: Chapter 4. java class object

Java Simplified / Session 22 / 25 of 45

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

Inheritance

Page 26: Chapter 4. java class object

Java Simplified / Session 22 / 26 of 45

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 {…

}

Inheritance

Page 27: Chapter 4. java class object

Java Simplified / Session 22 / 27 of 45

Ví dụ về thừa kế

Page 28: Chapter 4. java class object

Java Simplified / Session 22 / 28 of 45

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)

}}

Member access & Inheritance

Erorr

Page 29: Chapter 4. java class object

Java Simplified / Session 22 / 29 of 45

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);}

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);}

}

Solution

Page 30: Chapter 4. java class object

Java Simplified / Session 22 / 30 of 45

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 đó.

Constructor – toán tử tạo lập

Page 31: Chapter 4. java class object

Java Simplified / Session 22 / 31 of 45

[<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.

Khai báo constructor

Page 32: Chapter 4. java class object

Constructor

Class without constructor Class with constructor

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 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); }}

Page 33: Chapter 4. java class object

Java Simplified / Session 22 / 33 of 45

Nhiều Constructor

Page 34: Chapter 4. java class object

Java Simplified / Session 22 / 34 of 45

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

Page 35: Chapter 4. java class object

Java Simplified / Session 22 / 35 of 45

Chuỗi constructor

Parent

F1

F2

Page 36: Chapter 4. java class object

Java Simplified / Session 22 / 36 of 45

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

Page 37: Chapter 4. java class object

Java Simplified / Session 22 / 37 of 45

Các nguyên tắc của Constructor

Constructor mặc nhiên (default constructor) sẽ tự động sinh ra bởi trình biên dịch nếu lớp không khai báo Constructor.

Page 38: Chapter 4. java class object

Java Simplified / Session 22 / 38 of 45

Ex: Parent()

Page 39: Chapter 4. java class object

Java Simplified / Session 22 / 39 of 45

Ex ?: Parent() default

Muốn dùng Parent(value) ? – moc xich

Page 40: Chapter 4. java class object

Java Simplified / Session 22 / 40 of 45

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

Toán tử móc xích giữa các lớp kế thừa

Page 41: Chapter 4. java class object

Java Simplified / Session 22 / 41 of 45

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(); } }

Ex: this()

this.x=x; this.y=y;

Page 42: Chapter 4. java class object

Java Simplified / Session 22 / 42 of 45

class A {A () {}A (int i) {}

methodA(int x){… }} // end class A

Inheritance - superclass B extends A { B () {

[super();]...

} B (int i, int j) { super(i); ...}methodB(int k){

super.methodA(k);}} // end class B

Page 43: Chapter 4. java class object

Java Simplified / Session 22 / 43 of 45

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(); } }

Supper() - ex

Page 44: Chapter 4. java class object

Java Simplified / Session 22 / 44 of 45

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

Page 45: Chapter 4. java class object

Java Simplified / Session 22 / 45 of 45

Ví dụ

Page 46: Chapter 4. java class object

Java Simplified / Session 22 / 46 of 45

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())

Nạp chồng các phương thức

Page 47: Chapter 4. java class object

Java Simplified / Session 22 / 47 of 45

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); } };

Ex - Overloading

Page 48: Chapter 4. java class object

Java Simplified / Session 22 / 48 of 45

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?

Page 49: Chapter 4. java class object

Java Simplified / Session 22 / 49 of 45

class vd1 {public static void main(String[] args) { Child c= new Child(); c.Infor(); }}class Parent {public void Infor(){System.out.println("Calling Parent...");}}class Child extends Parent {public void Infor(){System.out.println("Calling Child...");}}

Ex: overriding

Page 50: Chapter 4. java class object

Java Simplified / Session 22 / 50 of 45

Overloading: các phương thức◦Cùng tên◦Cùng lớp◦Khác danh sách tham số

Overriding: các phương thức◦Cùng tên◦Khác lớp (Cha – con)◦Cùng danh sách tham số

So sánh Overloading và Overriding

Page 51: Chapter 4. java class object

Java Simplified / Session 22 / 51 of 45

Biến, phương thức và lớp Final Biến Final - Final Variables

Phương thức Final - Final Methods

Lớp Final - Final Classes

Page 52: Chapter 4. java class object

Java Simplified / Session 22 / 52 of 45

Biến Final Từ khóa “final” được sử dụng với biến để chỉ

rằng giá trị của biến là hằng số.

Hằng số là giá trị được gán cho biến vào thời điểm khai báo và sẽ không thay đổi về sau.

Page 53: Chapter 4. java class object

Java Simplified / Session 22 / 53 of 45

Phương thức hằng (Final) Được sử dụng để ngăn chặn việc ghi đè (overriding)

hoặc che lấp (hidden) trong các lớp Java.

Phương thức được khai báo là private hoặc là một thành phần của lớp final thì được xem là phương thức hằng.

Phương thức hằng không thể khai báo là trừu tượng (abstract).

Page 54: Chapter 4. java class object

Java Simplified / Session 22 / 54 of 45

Các phương thức được khai báo là final không thể được nạp chồng. class A {

final void method(){ }

} class B extends A{ final void method(){ // error } }

ex

Page 55: Chapter 4. java class object

Java Simplified / Session 22 / 55 of 45

Lớp hằng - Final Classes Là lớp không có lớp con.

Được sử dụng để hạn chế việc thừa kế và ngăn chặn việc sửa đổi một lớp.

Là lớp có thể hoặc không có các phương thức hằng.

Lớp hằng có thể tạo đối tượng

Page 56: Chapter 4. java class object

Java Simplified / Session 22 / 56 of 45

1. Cú pháp lời gọi hàm2. Các cách truyền tham số Truyền theo tham trị:

• Các tham biến hình thức có kiểu nguyên thủy Truyền theo tham biến

• Các tham biến hình thức có kiểu class• Các tham biến hình thức có kiểu array

3. Các tham biến final.

Truyền tham số và các lời gọi hàm

56

Page 57: Chapter 4. java class object

Java Simplified / Session 22 / 57 of 45

Các đối tượng trong ct trao đổi với nhau thông qua các thông điệp – được cài đặt như lời gọi hàm.

Cú pháp:◦<tên tham chiếu đt>.<Tên hàm>(DS tham biến

hiện thời>)◦<Tên lớp>.<tên hàm tĩnh>(DS tham biến hiện

thời>)◦<Tên hàm>(<DS tham biến hiện thời>)

ex

Truyền tham số và các lời gọi hàm

57

Page 58: Chapter 4. java class object

Java Simplified / Session 22 / 58 of 45

Cách truyền các giá trị phụ thuộc vào kiểu của các tham biến hình thức

Cách truyền các tham số

58

Kiểu của tbht Giá trị được truyền

Kiểu nguyên thủy Kiểu nguyên thủy (Tham trị)

Kiểu lớp Giá trị tham chiếu

Kiểu mảng Giá trị tham chiếu

Page 59: Chapter 4. java class object

Java Simplified / Session 22 / 59 of 45

Khi tham biến hình thức có kiểu nguyên thủy thì giá trị của các biến được sao chép sang biến hình thức

Gọi là truyền theo tham trị:◦->Mọi thay đổi của biến hình thức không ảnh

hưởng đến tham biến hiện thời

Truyền các giá trị kiểu nguyên thủy

59

Page 60: Chapter 4. java class object

Java Simplified / Session 22 / 60 of 45

class Thamtri { public int test(int i,int j) { i*=2; j*=2; return i+j; } public static void main(String[] args) { Thamtri ex=new vd0(); int a=10, b=30; System.out.println("Gia tri cua ham test tdoi: "+ ex.test(a, b));System.out.println("Sau goi phuong thuc:" + a + " " + b); } }

Ex: truyền theo tham trị

60

Kiểu nguyên thủy

Page 61: Chapter 4. java class object

Java Simplified / Session 22 / 61 of 45

Khi biến hiện thời tham chiếu tới đối tượng, thì giá trị tham chiếu của đối tượng sẽ được truyền cho biến hình thức.

Khi đó, biến hiện thời và biến hình thức là 2 tên gọi khác nhau của đối tượng được tham chiếu◦-> mọi thay đổi thực hiện đối với các thành phần

của đối tượng thông qua tham biến hình thức cũng sẽ có hiệu quả cả sau lời gọi hàm và tác động đến biến hiện thời.

Truyền các giá trị tham chiếu

61

Page 62: Chapter 4. java class object

Java Simplified / Session 22 / 62 of 45

class Thamchieu { public static void test(tchieu aa) { aa.x*=2; aa.y*=2; } public static void main(String[] args) { tchieu ex=new tchieu(); System.out.println("Truoc khi goi phuong thuc:"+ex.x+" "+ex.y); test(tchieu); System.out.println("Sau goi phuong thuc:"+ex.x+" "+ ex.y); } } class tchieu {int x, y;x=10; y=20;}

Ex: truyền theo tham chiếu

62

Kiểu Lớp

Page 63: Chapter 4. java class object

Java Simplified / Session 22 / 63 of 45

Mảng được xem là đối tượng. Các phần tử của mảng có thể có kiểu nguyên

thủy hoặc kiểu lớp (tham chiếu). Ta xét bài toán: sx mảng

◦Định nghĩa 1 hàm doicho có biến hình thức là kiểu mảng

◦Biến hiện thời có kiểu mảng

Truyền tham chiếu kiểu mảng

63

Page 64: Chapter 4. java class object

Java Simplified / Session 22 / 64 of 45

class vd1{public static void main (String [] args){int [] mangA={3,5,9,1,6,7,4};for (int i=0; i < mangA.length; i++)System.out.print(" " + mangA[i]);System.out.println();for (int m=0; m<mangA.length-1; m++){for (int n=m+1; n<mangA.length; n++)if (mangA[m] >mangA[n])

doicho(mangA, m,n);}for (int i=0; i < mangA.length; i++)System.out.print(" " + mangA[i]);System.out.println();}public static void doicho(int[] mang, int i, int j){int tg=mang[i];mang[i]=mang[j];mang[j]=tg;}}

Ex: truyền tham chiếu - sx mảng

64

Kiểu mảng

Page 65: Chapter 4. java class object

Java Simplified / Session 22 / 65 of 45

Tham biến hình thức có thể khai báo với final -> biến cuối trắng – nó không được khởi tạo giá trị (trắng) cho đến khi nó được gán một trị nào đó, khi đó giá trị được gán là cuối cùng, không thay đổi.

Các tham biến final

65

Page 66: Chapter 4. java class object

Java Simplified / Session 22 / 66 of 45

class vd0 { public int test(int i, final int j) { i*=2; j*=2; // error – ko dc thay doireturn i+j; } public static void main(String[] args) { vd0 cbl=new vd0(); int a=10, b=30; int c=cbl.test(a, b); System.out.println("Sau goi phuong thuc:"+a+" "+b); System.out.println(“Gia tri cua ham test t.doi: "+c); } }

Final - ex

66

Page 67: Chapter 4. java class object

Java Simplified / Session 22 / 67 of 45

Có thể truyền các tham số cho chương trình trên dòng lệnh.

Ex:class vd0 { public static void main(String[] args) { int s=Integer.parseInt(args[0]) + Integer.parseInt(args[1]); System.out.print("Tong 2 so: " + s); }}

Các đối số của chương trình

67

Page 68: Chapter 4. java class object

Java Simplified / Session 22 / 68 of 45

Lớp trừu tượng (Abstract class)

1. Định nghĩa lớp trừu tượng

2. Hiện thực lớp trừu tượng

3. Định nghĩa phương thức trừu tượng

4. Ví dụ

Page 69: Chapter 4. java class object

Java Simplified / Session 22 / 69 of 45

Lớp trừu tượng Dùng như một khung thức để cung cấp hành vi cho các

lớp khác

Có thể không chứa hoặc chứa nhiều phương thức trừu tượng

Không có thể hiện thuộc lớp này.

Lớp con phải hiện thực các phương thức trừu tượng được đặc tả trong lớp cơ sở. Nếu không nó phải được đặc tả là trừu tượng.

Đặc tả lớp trừu tượng bằng từ khoá abstract trước từ khoá class

Page 70: Chapter 4. java class object

Java Simplified / Session 22 / 70 of 45

Phương thức trừu tượng• Phương thức chỉ có phần đặc tả và không có phần hiện thực

• Có từ khoá abstract• Phần đặc tả không chứa bất kỳ dấu ngoặc nhọn nào và

kết thúc bằng dấu chấm phẩy

• Một phương thức chỉ là một thoả thuận lớp con sẽ cung cấp phần hiện thực

• Nếu một lớp chứa phương thức trừu tượng thì chính nó cũng phải được đặc tả là trừu tượng

Page 71: Chapter 4. java class object

Java Simplified / Session 22 / 71 of 45

Ví dụ lớp và phương thức trừu tượng

Page 72: Chapter 4. java class object

Java Simplified / Session 22 / 72 of 45

1. Giới thiệu2. Định nghĩa giao tiếp3. Thực thi giao tiếp4. Ví dụ

Giao tiếp (Interface)

Page 73: Chapter 4. java class object

Java Simplified / Session 22 / 73 of 45

Trong đa thừa kế, lớp con có thể thừa kế từ nhiều lớp khác nhau. (cần thiết trong lập trình)

Java không hỗ trợ đa thừa kế. Tuy nhiên, Java đã đưa ra khái niệm interface.

◦cho phép đa kế thừa trong Interface.◦Đ/n: Một giao tiếp là một tập hợp các định nghĩa

phương thức trừu tượng (không có cài đặt) và có thể định nghĩa các hằng.

◦Với giao tiếp ta có thể xác định một lớp phải làm gì nhưng không xác định cách làm thế nào.

Giao tiếp (Interface)

Page 74: Chapter 4. java class object

Java Simplified / Session 22 / 74 of 45

Cú pháp chung:[public] interface <InterfaceName>

extends SuperInterfaces { //Thân giao tiếp }

Nếu không có public thì giao tiếp sẽ chỉ có thể truy xuất bởi các lớp được định nghĩa trong cùng gói với giao tiếp.

SuperInterfaces: có thể là 1 ds interfaces cha (ngăn cách ,) Thân giao tiếp chứa các khai báo phương thức cho tất cả các

phương thức có trong giao tiếp. (không cung cấp cách cài đặt).

Khai báo giao tiếp (Interface)

Page 75: Chapter 4. java class object

Java Simplified / Session 22 / 75 of 45

public interface CalculatorInterface { public double add(double x, double y); public double sub(double x, double y); public double mul(double x, double y); public double div(double x, double y); }

Interface Const {Double PI=3.14;String DONVI_S=  “cm2 “ ;String DONVI_S= “ cm “;}

Interfaces - ex

Page 76: Chapter 4. java class object

Java Simplified / Session 22 / 76 of 45

Một lớp thực thi một giao tiếp tuân theo những quy ước đã được khai báo trong giao tiếp đó.

Khai báo một lớp thực thi một (nhiều) giao tiếp, dùng mệnh đề implements:

class <ClassName> [extends] implements <InterfaceNames> //Bổ sung các tp;//Cài đặt các phương thức đã khai báo trong interface;}<InterfaceNames>: danh sách các giao tiếp

Thực thi giao tiếp

Page 77: Chapter 4. java class object

Java Simplified / Session 22 / 77 of 45

class CalculatorTest implements CalculatorInterface { public double add(double x, double y) { return x+y; } public double sub(double x, double y) { return x-y; } public double mul(double x, double y) { return x*y; } public double div(double x, double y) {return x/y; }

public static void main(String[] args) { CalculatorInterface cal=new CalculatorTest();

double x,y,z; x=10; y=5; System.out.println(x+"+"+y+"="+ cal.add(x,y)); System.out.println(x+"-"+y+"="+ cal.sub(x,y)); System.out.println(x+"*"+y+"="+ cal.mul(x,y)); System.out.println(x+"/"+y+"="+ cal.div(x,y));

} }

Thực thi giao tiếp

Page 78: Chapter 4. java class object

Java Simplified / Session 22 / 78 of 45

Implementing Multiple Interfaces An interface can extend zero or more interfaces

Multiple interfaces can be implemented in a single class.

This implementation provides the functionality of multiple inheritance.

Implement multiple interfaces by placing commas between the interface names when implementing them in a class.

A class must implement all inherited interface methods

Page 79: Chapter 4. java class object

Java Simplified / Session 22 / 79 of 45

Ex of Implementing Multiple Interfaces

Page 80: Chapter 4. java class object

Java Simplified / Session 22 / 80 of 45

Tóm tắt! Class Object

Thừa kế

Khởi tạo trong thừa kế

Phương thức ghi đè

Phương thức nạp chồng

Lớp trừu tượng “abstract”

Sử dụng từ khóa “final”

Giao tiếp

Page 81: Chapter 4. java class object

Java Simplified / Session 22 / 81 of 45

Quan hệ: ◦ lớp ngoài (enclosing, outter class)◦Lớp trong (nested, inner class):Là lớp khai báo bên trong 1 lớp khác

Lớp trong có quyền truy xuất lớp ngoài Lớp ngoài chỉ truy xuất được lớp con khi có

một thể hiện của lớp trong (bằng toán tử new) Lợi ích: có thể viết code truy xuất lớp ngoài từ

lớp trong mà không cần định nghĩa đối tượng lớp ngoài

Lớp con (trong /inner)

Page 82: Chapter 4. java class object

Java Simplified / Session 22 / 82 of 45

Cú pháp:Class Outter{….Class Inner{….}

}

Lớp con (trong /inner)

Page 83: Chapter 4. java class object

Java Simplified / Session 22 / 83 of 45

public class Outer{ private String st = "Outer Class"; // InnerClass innerClass = new InnerClass(); void getOuterS(){ System.out.println(st); } void getInnerS(){System.out.println(innerClass.inner); } class InnerClass{ private String inner = "Inner Class";

void getInnerS(){ System.out.println(inner); } void getOuterS(){System.out.println(Outer.this.st); } } public static void main(String[] args){ Outer OutObj = new Outer(); OutObj.getOuterS(); OutObj.getInnerS();

}}

ex

Page 84: Chapter 4. java class object

Java Simplified / Session 22 / 84 of 45

là nơi tổ chức các lớp và các giao diện bạn. Mỗi gói gồm có nhiều lớp, và/hoặc các giao diện được

coi như là các thành viên của nó Các lớp với những tên giống nhau có thể đặt vào các

gói khác nhau. Tạo một gói: ex package mypackage; Nhập một lớp: eximport java.mypackage.Calculate; Nhập toàn bộ một gói, ex: import java.mypackage.*; Sau khi biên dịch, cấu trúc gói sẽ sinh ra

Package

Page 85: Chapter 4. java class object

Java Simplified / Session 22 / 85 of 45

Tạo một tham chiếu đến các thành phần của gói://import mypackage.Calculate; class PackageDemo{ public static void main(String args[]){ // Calculate calc = new Calculate(); mypackage.Calculate calc = new mypackage.Calculate(); } }

Package

Page 86: Chapter 4. java class object

Java Simplified / Session 22 / 86 of 45

Xây dựng lớp cơ sở Dagiac, lớp con HCN, HV,HBH…(n cạnh)◦Khởi tạo giá trị số cạnh◦Hàm tính chu vi◦Diện tích (kế thừa + mở rộng)

Bài tập: