Hoặc có thể vào ĐÂYđể tìm hiểu rõ hơn về principles of object oriented
Xe (đời thực)-> class Xe(lập trình) -> Đối tượng Xe
Trong đó
Xe thật thì có màu, số bánh, tên xe
-> Class Xe (Biến màu, biến Số bánh. biến Tên)
-> Đối tượng xe(Màu,Số bánh, tên)
Encapsulation : tính đóng gói.
Inheritance : tính kế thừa.
Polymorphism : tính đa hình.
- Tính đóng gói (encapsulation) và che giấu thông tin (information hiding)
Trước khi tìm hiểu tính đóng gói và che giấu thông tin, các bạn nên tìm hiểu cú pháp ngôn ngữ các thể hiện tính chất public, private, protected ......
Method và Variable là những thành phần bên trong viên thuốc, được bao lại, che giấu đi và không thể nhìn hoặc sử dụng nếu Class bên ngoài không cho phép.
- Tính kế thừa (inheritance) Và đa hình(Polymorphism)
Khái niệm: Kế thừa là cách tạo lớp mới từ các lớp đã được định nghĩa từ trước
- Class A: lớp cơ sở (lớp cha) - supper class
- Class B: lớp dẫn xuất (lớp con) - sub class
(biến) của lớp A ngoại trừ các các phương thức và các hàm các tính chất private.
class A
{
....
}
class B:A // hoặc B extends A (java)
{
...
}
- Một lớp cha có thể có nhiều lớp con
- Đến lượt mình mỗi lớp con lại có thể có các con khác
- Trong C++ cho phép đa kế thừa (một lớp con có thể nhận hơn 1 lớp cha)
- Java chỉ cho phép mỗi lớp con kế thừa 1 và chỉ một lớp cha/ từ khóa implement sẽ thay thế cho đa kế thừa từ C++
class Employee{
private String name;
private float salary;
public Employee() {
}
public Employee(String name, float salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
//method say
public void SayHello(){
System.out.println("Xin chaof");
}
}
//class Programmer có thêm 1 thuộc tính bonus kế thừa clas Employee
public class Programmer extends Employee{
private float bonus;
public float getBonus() {
return bonus;
}
public void setBonus(float bonus) {
this.bonus = bonus;
}
public Programmer(String name, float salary, float bonus) {
super(name, salary);
this.bonus = bonus;
}
public static void main(String args[]){
Programmer p=new Programmer("Đỗ Trung Quân", 1000, 500);
System.out.println("Tên lập trình viên : " + p.getName());
System.out.println("Luong Lap trinh vien : "+p.getSalary());
System.out.println("Bonus cua Lap trinh vien :"+p.getBonus());
}
}
Tên lập trình viên : Đỗ Trung Quân
Lương Lập trình viên : 1000.0
Bonus của lập trình viên : 500.0
- Class Programmer mình không khai báo 2 biến name và salary nhưng nó vẫn sử dụng được. Vì Programmer đã kế thừa class Employee -> nó có thể sử dụng lại các constructor và get/set từ class cha. Kêu gọi chúng bằng từ khóa "super"
-> Lớp bạn và lớp dẫn xuất trong C++
- Tính trừu tượng, phương thức ảo:
- Phương thức ảo là phương thức được định nghĩa ở lớp cơ sở (lớp cha) mà các lớp dẫn xuất (lớp con) muốn sử dụng phải định nghĩa lại. Dùng từ khoá virtual (c++) hay abstract (java)để khai báo phương thức ảo:
- Trong Class ảo có thể có phương thức ảo hoặc không nhưng phương thức ảo bắt buộc phải ở trong class ảo
- phương thức ảo không chứa body
- Khi kế thừa class ảo, bắt buộc phải viết lại phương thức ảo của nó
virtual <kiểu trả về> <tên phương thức >(<d/s tham số>)
{
....
}
abstract <kiểu trả về> <tên phương thức >(<d/s tham số>)
{
....
}
//Phải thêm từ khóa abstract trước class nếu nó chưa method abstract
abstract class Employee{
//method Abstract không có body
abstract public void SayHelloAbstract(String name);
public void SayHello(){
System.out.println("Xin chaof");
}
}
class Programmer extends Employee{
private float bonus;
public float getBonus() {
return bonus;
}
public void setBonus(float bonus) {
this.bonus = bonus;
}
@Override // viết lại phương thức SayHelloAbstract
public void SayHelloAbstract(String name){
System.out.println("Xin chào : " + name);
}
public Programmer(String name, float salary, int bonus) {
super(name, salary);
this.bonus = bonus;
}
public static void main(String args[]){
Programmer p=new Programmer("Đỗ Trung Quân", 1000, 500);
p.SayHelloAbstract(p.getName());
System.out.println("Luong của bạn tháng này : "+p.getSalary());
System.out.println("Bonus cua bạn tháng này : "+p.getBonus());
}
}
Xin chào : Đỗ Trung Quân
Lương của bạn tháng này : 1000.0
Bonus cua bạn tháng này : 500.0
abstract class Animals{
private String name;
public Animals() {
}
public Animals(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void Speak(String name, String sound){
System.out.println("Animals Speak!" );
}
}
class Ducks extends Animals{
public Ducks(String name) {
super(name);
}
@Override //viết lại hàm peak
public void Speak(String name, String sound){
System.out.println(name + " speaks: " + sound);
}
}
class Dogs extends Animals{
public Dogs(String name) {
super(name);
}
@Override //viết lại hàm peak
public void Speak(String name, String sound){
System.out.println(name + " speaks: " + sound);
}
}
class Cats extends Animals{
public Cats(String name) {
super(name);
}
}
public static void main(String[] args) {
//Tạo ra 3 đối tượng dog, cat ,duck
Dogs dog = new Dogs("Dog");
Ducks duck = new Ducks("Duck");
Cats cat = new Cats("Cat");
// gọi hàm Speak
dog.Speak(dog.getName(), "Woof");
duck.Speak(duck.getName(), "Quack");
cat.Speak(cat.getName(), "Meow");
}
Dog speaks: Woof
Duck speaks: Quack
Animals Speak!
Bài viết rất hay và hữu ích!
Trả lờiXóa:grin:
Xóa:joy:
Trả lờiXóa:joy:
Trả lờiXóa