Nội dung a Van dé sv dung lai = Sử dụng lại bằng kê thừa = Kê thừa trong Java định nghĩa lớp kê thừa thêm phương thức, thuộc tính kiềm soát truy cập... Vidu: nas a class Person {
Trang 1Ké thtra
Trang 2
Nội dung
a Van dé sv dung lai
= Sử dụng lại bằng kê thừa
= Kê thừa trong Java
định nghĩa lớp kê thừa
thêm phương thức, thuộc tính
kiềm soát truy cập
Trang 3
Tài liệu tham khảo
a /hinking in Java, chapter 6
a Java how to program, chapter 9
Nguyén Viét Ha Kê thừa
Trang 4
Su dung lal
= TOn tại nhiêu loại đôi tượng có các thuộc
tinn va hành vị tương tự hoặc liên quan đên nhau
Person, Student, Manager,
7 Xuat hiện nhu câu sử dụng lại các mã
nguôn đã viết
Sử dụng lại thông qua copy
Sử dụng lại thông qua quan hệ has_ a
Sử dụng lại thông qua cơ chê “kê thừa”
Nguyễn Việt Hà Kê thừa
Trang 5Sử dụng lại cài đặt với giao diện mới
m Phải việt lại giao diện
=» Chưa đủ mêm dẻo
Nguyễn Việt Hà Kê thừa
Trang 6
Vidu: nas a
class Person {
private String name;
private Date bithday;
public String getName() { return name; }
}
class Employee {
private Person me;
private double salary;
public String getName() { return me.getName(); }
Nguyén Viét Ha Kê thừa
Trang 7
class Manager {
private Employee me;
private Employee assistant;
public setAssistant (Employee e) { }
Manager junior = new Manager ();
Manager senior = new Manager ();
senior.setAssistant (junior); // error
Nguyén Viét Ha Kê thừa
Trang 8
Kê thừa
= Dua tren quan ne /s a
= Thuwa huong lại các thuộc tính và phương thức đã có
= Chỉ tiêt hóa cho phù hợp với mục đích sử
dụng mới
Thêm các thuộc tĩnh mới
Thêm hoặc hiệu chỉnh các phương thức
Nguyễn Việt Hà Kê thừa
Trang 10
Kê thừa trong Java
[public] class DerivedClass extends BaseClass {
/* new features goes here */
Vidu:
class Employee extends Person {
private double salary;
public boolean setSalary (double sal) {
salary = sal;
return true;
Trang 12
A
private members
class Employee extends Person {
public String getDetail() {
Trang 13
Murc truy cap protected
= Đề đảm bảo che dâu thông tin, thông
thường các thuộc tinh được khai bao la
private
Đôi tượng thuộc lớp dẫn xuất phải truy cập tới
chúng thông qua các phương thức get và set
= Mức truy cập protected giải quyêt vân đê
này
Đôi tượng của lớp dẫn xuật truy cập được
các protected members cua |d’p co’ sO
Các đôi tượng khác không truy cập được
Trang 14
public class Person {
protected Date birthday;
protected String name;
public class Employee extends Person {
public String getDetail() {
Trang 16public class Employee extends Person {
public String getDetail() {
Trang 17
Knac gol
import abc.Person;
package abc;
public class Person {
protected Date birthday;
protected String name;
public class Employee extends Person {
public String getDetail() {
Trang 18= Đôi tượng của lớp dẫn xuất sẽ hoạt động
VỚI phương thức mới phủ hợp với nÓ
= Co thê tái sử dụng phương thức cùng tên
của lớp cơ sở bằng từ khóa super
Trang 19
package abc;
Vi $ public class Person {
| ụ protected Date birthday;
protected String name;
import abc;
public class Employee extends Person {
public String getDetail() {
Trang 20
A
Dinh nghia lại phương thức
m Phải có quyên truy cập không chặf hơn
phương thức được định nghĩa lại
= Phải có kiêu giá trị trả lại như nhau
Trang 21class Parent {
public void doSomething() {}
public int doSomething2() {
return 0O;
class Child extends Parent {
protected void doSomething() {}
public void doSomething2() {}
Trang 22
Thừa kê nhiêu tâng
Mọi đôi tượng đêu
thừa kê từ lớp gôc Oblect
—rank —-proyect
Kê thừa
Trang 23
Constructor
a Lop dan xuat ké thtva moi thuéc tinh va
phương thức của lớp cơ sở
=m Không kê thừa phương thức khởi tạo
= Co hai giail phap goi constructor cua lớp
Trang 24protected int radius;
Trang 25
m sa
Gọi constructor của lớp cơ sở
m Việc khởi tạo thuộc tính của lớp cơ sở nên
giao pho cho constructor cua lớp cơ sở
= Sử dụng từ khóa super đề gọi
consftructor của lớp cơ SỞ
Constructor của lớp cơ sở bắt buộc phải được thực hiện đâu tiên
Nêu lớp cơ sở không có constructor mặc định thì bát buộc phải gọi construcfor tường minh
Trang 26protected int radius;
Trang 27protected int radius;
public Circle(int xx, int yy,
Trang 28protected int radius;
Trang 29protected int radius;
public Circle() {
System.out.printlin ("Circle constructor") ;
Circle c new Circle ();
Trang 30
Tu khnoa final
m | huoc tinh final
hằng sô, chỉ được gán giá trị khởi tạo một lân, không
thay đôi được gia trị