Upload
cong-thanh-nguyen
View
1.380
Download
1
Embed Size (px)
Citation preview
Java Simplified / Session 22 / 1 of 45
Chapter 4Java Classes & Objects
Nguyễn Thị Thanh Vân - CNTT
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
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
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)
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
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
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) {....... } }
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
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
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
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ó?
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();
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
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
Java Simplified / Session 22 / 15 of 45
Public-ex
Java Simplified / Session 22 / 16 of 45
Protected-ex
Java Simplified / Session 22 / 17 of 45
Private
Java Simplified / Session 22 / 18 of 45
Default
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
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
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
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)
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
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
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
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
Java Simplified / Session 22 / 27 of 45
Ví dụ về thừa kế
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
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
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
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
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); }}
Java Simplified / Session 22 / 33 of 45
Nhiều Constructor
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
Java Simplified / Session 22 / 35 of 45
Chuỗi constructor
Parent
F1
F2
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
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.
Java Simplified / Session 22 / 38 of 45
Ex: Parent()
Java Simplified / Session 22 / 39 of 45
Ex ?: Parent() default
Muốn dùng Parent(value) ? – moc xich
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
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;
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
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
Java Simplified / Session 22 / 44 of 45
Triệu hồi tường minh Constructor lớp cha (explicitly)
Java Simplified / Session 22 / 45 of 45
Ví dụ
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
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
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?
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
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
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
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.
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).
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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ụ
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
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
Java Simplified / Session 22 / 71 of 45
Ví dụ lớp và phương thức trừu tượng
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)
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)
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)
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
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
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
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
Java Simplified / Session 22 / 79 of 45
Ex of Implementing Multiple Interfaces
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
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)
Java Simplified / Session 22 / 82 of 45
Cú pháp:Class Outter{….Class Inner{….}
}
Lớp con (trong /inner)
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
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
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
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: