Sử dụng từ khóa super
super được dùng để thay cho superclass, tương tự
như this thay cho đối tượng được gọi.
Dùng super để:
-
gọi 1 contructor của superclass
-
gọi 1 phương thức của superclass
Gọi Superclass Contructor
super(), hoặc super(tham_số)
Lệnh trên phải được đặt tại dòng đầu tiên của subclass
constructor và là cách duy nhất để gọi 1 superclass
constructor.
public Cylinder() {
}
public Cylinder() {
super();
}
Gọi Superclass Method
super.method(tham_số)
Vd:
double findVolume() {
return super.findArea() * length;
}
Overriding Method
Đôi khi subclass cần phải thay đổi sự thực hiện của
phương thức trong superclass → Chồng phương thức.
Vd: phương thức findArea của lớp Circle tính diện
tích hình tròn. Phương thức này nên được chồng trong
lớp Cylinder để tính diện tích bề mặt hình trụ.
Cylinder
Cylinder
Chồng phương thức (tiếp)
✦
Để chồng, phương thức xác định trong subclass phải có
cùng signature và cùng kiểu dữ liệu trả về với phương
thức trong superclass.
✦
Review: Các Overloading method có cùng tên, nhưng
phải khác signature.
✦
Một phương thức chỉ có thể được chồng chỉ khi nó có
thể truy nhập được → không thể chồng 1 private method.
✦
Một static method có thể được kế thừa, nhưng không thể
được chồng.
Lớp Object
✦
Mọi lớp trong Java được thừa kế từ lớp
java.lang.Object
✦
Nếu không có sự kế thừa nào được xác định khi một
lớp được tạo thì superclass của nó chính là lớp
Object.
✦
3 phương thức của lớp Object thường được sử dụng:
–
public boolean equals(Object obj)
–
public int hashCode()
–
public String toString()
Phương thức equals
object1.equals(object2);
✦
Sự thực hiện ngầm định:
public boolean equals(Object obj) {
return (this == obj);
}
✦
Được chồng trong các subclass để kiểm tra 2 đối tượng riêng
biệt có cùng nội dung hay không.
✦
Vd: str1.equals(str2) trong lớp String
✦
Lưu ý khi viết phương thức chồng:
Dùng equals(Object obj), not equals(Circle obj)
Phương thức toString
✦
Gọi obj.toString() trả về chuỗi biểu diễn cho đối tượng
obj, ngầm định là classname@hashcode
Cylinder myCyl = new Cylinder(5.0,2.0);
System.out.println(myCyl.toString());
→ Cylinder@15037e5
✦
Thường chồng phương thức toString để trả về một chuỗi dễ
hiểu biểu diễn đối tượng. Vd:
public String toString() {
return "Cylinder length = " + length +
" radius = " + getRadius();
}
Đa hình thái - Polymorphism
✦
Xét ví dụ:
→ Có thể gọi m với bất kỳ đối tượng nào, vd:
new GraduateStudent(), new Student(),
new Person(), và new Object()
✦
Đa hình thái: Một đối tượng của subclass có thể
được sử dụng bởi bất kỳ mã lệnh nào được thiết kế để
làm việc với một đối tượng của superclass.
TestPolymorphirm
TestPolymorphirm
Nối kết động - Dynamic binding
✦
Ở vd trước, mỗi lớp có sự thực hiện phương thức
toString riêng. Việc thực hiện phương thức nào
sẽ được JVM xác định khi chạy chương trình
→ Nối kết động.
✦
obj là instance của các lớp c
1
, c
2
, …, c
n
. Khi obj
gọi phương thức p, JVM tìm sự thực hiện p trong
các lớp theo thứ tự c
1
, c
2
, …, c
n
đến khi tìm thấy.
Không có nhận xét nào:
Đăng nhận xét