Kế thừa trong Java[public] class DerivedClass extends BaseClass { /* new features goes here */ } Ví dụ: class Employee extends Person { private double salary; public boolean setSalaryd
Trang 1Kế thừa
Trang 2thêm phương thức, thuộc tính
kiểm soát truy cập
constructor
Trang 3Tài liệu tham khảo
Thinking in Java, chapter 6
Java how to program, chapter 9
Trang 4Sử dụng lại
tính và hành vi tương tự hoặc liên quan
đến nhau
Person, Student, Manager,…
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
Trang 5Sử dụng lại cài đặt với giao diện mới
Phải viết lại giao diện
Trang 6Ví dụ: has_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(); }
Trang 7class Manager {
private Employee me;
private Employee assistant;
public setAssistant(Employee e) { }
}
Manager junior = new Manager();
Manager senior = new Manager();
senior.setAssistant(junior); // error
Trang 8Kế thừa
thức đã có
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
Trang 9Thuật ngữ
Trang 10Kế thừa trong Java
[public] class DerivedClass extends BaseClass {
/* new features goes here */
}
Ví dụ:
class Employee extends Person {
private double salary;
public boolean setSalary(double sal) {
Trang 11Employee e = new Employee();
e.setName("John");
e.setSalary(3.0);
Person-name
Trang 13Mức truy cập protected
thường các thuộc tính được khai báo là
Trang 14public class Person {
protected Date birthday;
protected String name;
Trang 15Các mức kiểm soát truy cập
Yes Yes
Yes Yes
public
Yes Yes
Yes protected
Yes Yes
package
(default)
Yes private
Universe Subclass
Same package
Same class Modifier
Trang 16Trong cùng gói public class Person {
Trang 17Khác gói package abc; public class Person {
protected Date birthday;
protected String name;
Trang 18Định nghĩa lại các phương thức
thức của lớp cơ sở
với phương thức mới phù hợp với nó
của lớp cơ sở bằng từ khóa super
Trang 19Ví dụ
package abc;
public class Person {
protected Date birthday;
protected String name;
public String getDetail() { }
Trang 20Định nghĩa lại phương thức
phương thức được định nghĩa lại
Trang 21class Parent {
public void doSomething() {}
public int doSomething2() {
return 0;
}
}
class Child extends Parent {
protected void doSomething() {}
public void doSomething2() {}
}
Trang 22Thừa kế nhiều tầng
Person -name
-birthday +setName +setBirthday
Employee -salary +setSalary +getDetail
Manager -rank
Programmer -project
Student -id
Mọi đối tượng đều
thừa kế từ lớp gốc Object
Trang 23phương thức của lớp cơ sở
Không kế thừa phương thức khởi tạo
cơ sở
sử dụng constructor mặc định
gọi constructor của lớp cơ sở một cách tường
Trang 24class Circle extends Point {
protected int radius;
public Circle() {}
}
Point p = new Point(10, 10);
Trang 25Gọi constructor của lớp cơ sở
giao phó cho constructor của lớp cơ sở
constructor 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 constructor tường minh
Trang 26class Circle extends Point {
protected int radius;
public Circle() {}
public Circle(int xx, int yy, int r) {
super(xx, yy);
radius = r;
Trang 27class Circle extends Point {
protected int radius;
public Circle() { super(0, 0); }
public Circle(int xx, int yy, int r) {
super(xx, yy);
radius = r;
}
Trang 28class Circle extends Point {
protected int radius;
public Circle() { }
public Circle(int xx, int yy, int r) {
// super(xx, yy);
radius = r;
Trang 29class Circle extends Point {
protected int radius;