Xem mẫu
- om
Bộ môn Công nghệ Phần mềm
.c
Viện CNTT & TT
ng
Trường Đại học Bách Khoa Hà Nội
co
an
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG th
o ng
Bài 05. Các kỹ thuật xây dựng lớp
du
u
và sử dụng đối tượng
cu
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Nội dung
om
Chồng phương thức
.c
1.
ng
2. Thành viên ĐT và thành viên lớp
co
Truyền tham số cho phương thức
an
3.
th
Một số lớp tiện ích trong Java
ng
4.
o
du
5. Ví dụ và bài tập
u
cu
2
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Nội dung
om
Chồng phương thức
.c
1.
ng
2. Thành viên ĐT và thành viên lớp
co
Truyền tham số cho phương thức
an
3.
th
Một số lớp tiện ích trong Java
ng
4.
o
du
5. Ví dụ và bài tập
u
cu
3
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Nhắc lại về phương thức
om
◼ Mỗi phương thức phải có một chữ ký riêng
.c
◼ Chữ ký của phương thức bao gồm:
ng
Tên phương thức
co
◼
an
◼ Số lượng các đối số và kiểu của chúng
th
o ng
du
u
cu
4
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.1. Chồng phương thức
Chồng phương thức (Method Overloading): Các
om
◼
phương thức trong cùng một lớp có thể trùng
.c
tên nhưng chữ ký phải khác nhau:
ng
co
◼ Số lượng tham số khác nhau
an
◼ Nếu cùng số lượng tham số thì kiểu dữ liệu các tham
th
số phải khác nhau ng
◼ Mục đích:
o
du
◼ Tên trùng nhau để mô tả bản chất công việc
u
Thuận tiện cho lập trình vì không cần phải nhớ quá
cu
◼
nhiều tên phương thức mà chỉ cần nhớ một tên và
lựa chọn các tham số cho phù hợp.
5
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.1. Chồng phương thức (2)
om
◼ Ví dụ 1:
.c
◼ Phương thức println() trong System.out.println()
ng
có 10 khai báo với các tham số khác nhau:
co
boolean, char[], char, double, float, int, long,
an
Object, String, và một không có tham số.
th
Không cần sử dụng các tên khác nhau (chẳng
ng
◼
o
hạn "printString“ hoặc "printDouble“) cho mỗi
du
kiểu dữ liệu muốn hiển thị.
u
cu
6
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.1. Chồng phương thức (3)
om
◼ Ví dụ 2:
.c
class MyDate {
ng
int year, month, day;
co
public boolean setMonth(int m) { …}
an
public boolean setMonth(String s) { …}
}
th
ng
public class Test{
o
public static void main(String args[]){
du
MyDate d = new MyDate();
u
d.setMonth(9);
cu
d.setMonth(”September”);
}
}
7
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Một số chú ý với chồng phương thức
om
◼ Các phương thức chỉ được xem xét là chồng
.c
khi chúng thuộc cùng một lớp
ng
Chỉ nên sử dụng kỹ thuật này với các phương
co
◼
thức có cùng mục đích, chức năng; tránh lạm
an
th
dụng ng
Khi dịch, trình dịch căn cứ vào số lượng hoặc
o
◼
du
kiểu dữ liệu của tham số để quyết định gọi
u
cu
phương thức nào phù hợp.
→ Nếu không chọn được hoặc chọn được
nhiều hơn 1 phương thức thì sẽ báo lỗi. 8
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thảo luận
om
◼ Cho phương thức sau đây:
.c
public double test(String a, int b)
Hãy chọn ra các phương thức chồng cho phương thức trên:
ng
◼
co
1. void test(String b, int a)
an
2. public double test(String a)
th
3. private int test(int b, String a)
ng
4. private int test(String a, int b)
o
du
5. double test(double a, int b)
double test(int b)
u
6.
cu
7. public double test(String a, long b)
9
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thảo luận
om
void prt(String s) { System.out.println(s); }
void f1(char x) { prt("f1(char)"); }
.c
void f1(byte x) { prt("f1(byte)"); }
ng
void f1(short x) { prt("f1(short)"); }
co
void f1(int x) { prt("f1(int)"); }
an
th
void f1(long x) { prt("f1(long)"); }
ng
void f1(float x) { prt("f1(float)"); }
o
void f1(double x) { prt("f1(double)"); }
du
Điều gì xảy ra nếu thực hiện:
u
◼
5 → int
cu
◼ f1(5);
◼ char x=‘a’; f1(x);
◼ byte y=0; f1(y);
10
◼ float z = 0; f1(z);…
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thảo luận
om
void prt(String s) { System.out.println(s); }
void f2(short x) { prt("f3(short)"); }
.c
void f2(int x) { prt("f3(int)"); }
ng
void f2(long x) { prt("f5(long)"); }
co
void f2(float x) { prt("f5(float)"); }
an
th
◼ Điều gì xảy ra nếu thực hiện: ng
◼ f2(5);
o
du
◼ char x=‘a’; f2(x);
u
◼ byte y=0; f2(y);
cu
◼ float z = 0; f2(z);
◼ Điều gì xảy ra nếu gọi f2(5.5)?
Error: cannot find symbol: method f2(double)
11
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thảo luận
Dự đoán kết quả của đoạn chương trình sau:
om
◼
public class Test {
.c
private void myFunction(int a, long b) {
ng
System.out.println("int long");
co
}
an
private void myFunction(long a, int b) {
th
ng
System.out.println("long int");
o
}
du
public static void main(String[] args) {
u
cu
Test t = new Test();
t.myFunction(3, 8);
}
} 12
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.2. Chồng phương thức khởi tạo
om
◼ Trong nhiều tình huống khác nhau cần khởi
.c
tạo đối tượng theo nhiều cách khác nhau
ng
→ Cần xây dựng các phương thức khởi tạo
co
◼
khác nhau cho đối tượng theo nguyên lý
an
th
chồng phương thức (constructor ng
overloading).
o
du
u
cu
13
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Ví dụ
om
public class BankAccount{
private String owner;
.c
private double balance;
ng
public BankAccount(){owner = “noname”;}
co
public BankAccount(String o, double b){
an
owner = o; balance = b;
th
}
ng
}
o
du
public class Test{
public static void main(String args[]){
u
cu
BankAccount acc1 = new BankAccount();
BankAccount acc2 = new BankAccount(“Thuy”, 100);
}
} 14
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thảo luận
Dự đoán kết quả của đoạn chương trình sau:
om
◼
public class Test {
.c
private Test(Object o) {
ng
co
System.out.println("Object");
an
}
th
private Test(double[] d) { ng
System.out.println("Double array");
o
du
}
u
public static void main(String[] args) {
cu
new Test(null);
}
} 15
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thảo luận: nạp chồng phương thức main()?
Hoàn toàn có thể nạp chồng phương thức main!
om
◼
JVM luôn luôn tìm và gọi "the original main method" khi thực
.c
◼
thi chương trình
ng
co
public class Helloworld {
public static void main(String[] args) {
an
System.out.println("main(String[] args) method");
th
} ng
public static void main(Integer[] args){
o
du
System.out.println("main(Integer[] args) method");
}
u
cu
public static void main(Double[] args){
System.out.println("main(Double[] args) method");
}
}
16
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- Thảo luận: nạp chồng phương thức main()?
Kết quả khi biên dịch và thực thi chương trình sau?
om
◼
public class Test {
.c
public static void main(String[] args) {
ng
System.out.println("Hi Man (from main)");
co
Test.main("Man");
}
an
th
public static void main(String arg1) {
ng
System.out.println("Hi, " + arg1);
o
Test.main("Dear Man", "My Man");
du
}
u
cu
public static void main(String arg1, String arg2) {
System.out.println("Hi, " + arg1 + ", " + arg2);
}
}
17
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- 1.3. Từ khóa this
om
◼ Nhắc lại: Tự tham chiếu đến đối tượng hiện tại, sử dụng bên
trong lớp tương ứng với đối tượng muốn tham chiếu.
.c
Sử dụng thuộc tính hoặc phương thức của đối tượng thông
ng
◼
qua toán tử “.”, ví dụ:
co
an
public class BankAccount{
th
private String owner; ng
public void setOwner(String owner){
o
this.owner = owner;
du
}
u
public BankAccount() { this.setOwner(“noname”); }
cu
…
}
◼ Gọi đến phương thức khởi tạo khác của lớp:
◼ this(danh_sach_tham_so); //neu co tham so
CuuDuongThanCong.com https://fb.com/tailieudientucntt
18
- Ví dụ
public class Ship {
om
private double x=0.0, y=0.0
private double speed=1.0, direction=0.0;
.c
public String name;
ng
co
public Ship(String name) {
this.name = name;
an
}
th
public Ship(String name, double x, double y) {
ng
this(name); this.x = x; this.y = y;
o
}
du
public Ship(String name, double x, double y,
u
double speed, double direction) {
cu
this(name, x, y);
this.speed = speed;
this.direction = direction;
}
//continue… 19
CuuDuongThanCong.com https://fb.com/tailieudientucntt
- //(cont.)
private double degreeToRadian(double degrees) {
return(degrees * Math.PI / 180.0);
om
}
.c
public void move() {
ng
move(1);
co
}
public void move(int steps) {
an
th
double angle = degreesToRadians(direction);
x = x + (double)steps*speed*Math.cos(angle);
ng
y = y + (double)steps*speed*Math.sin(angle);
o
du
}
u
public void printLocation() {
cu
System.out.println(name + " is at ("
+ x + "," + y + ").");
}
} //end of Ship class 20
CuuDuongThanCong.com https://fb.com/tailieudientucntt
nguon tai.lieu . vn